仍在努力与R,尤其是错误处理:
如果我使用:
result <- try(sqlSave(ch,df,tablename="tblTest"))
Run Code Online (Sandbox Code Playgroud)
我可以用:
if (class(result) != "try-error")
Run Code Online (Sandbox Code Playgroud)
检查是否出了问题.没问题.
但是如果我try
与一个函数结合使用它并不像我预期的那样工作:
result <- try(ch<-odbcConnect("TEST"))
Run Code Online (Sandbox Code Playgroud)
给出"-1"表示result
和"整数"表示class(result)
所以我应该使用
ch<-odbcConnect("TEST")
if (ch != -1)
Run Code Online (Sandbox Code Playgroud)
并geterrmessage()
用于错误消息?
Mar*_*rek 10
如果您仔细阅读错误消息,您可以看到它odbcConnect
会给您警告.ODBC驱动程序生成错误,它的try
意义不是错误(geterrmessage()
也不会起作用).
你可以tryCatch
用来处理这个问题,例如:
tryCatch(odbcConnect("TEST"), warning=function(w) print("FAIL!"))
Run Code Online (Sandbox Code Playgroud)
更多解释:
-1是odbcDriverConnect
函数的结果.如果你看代码有线
stat <- .Call(C_RODBCDriverConnect, as.character(connection),
id, as.integer(believeNRows), as.logical(readOnlyOptimize))
if (stat < 0L) {
warning("ODBC connection failed")
return(stat)
}
Run Code Online (Sandbox Code Playgroud)
所以你最终没有错误(并带有警告)和C级的整数代码.实际上,当连接成功时返回此代码(但是等于1).当没有错误时,结果类不能try-error
.
它不是问题,try
而是功能,但具体是这个特定的功能(odbcDriverConnect
).
您当然可以在示例中使用此行为
ch <- odbcConnect("TEST")
if (ch != -1)
Run Code Online (Sandbox Code Playgroud)
随tryCatch
你可以做
tryCatch(ch<-odbcConnect("TEST"), warning=function(w) print("FAIL!"))
Run Code Online (Sandbox Code Playgroud)
ch
成功时创建变量,失败时打印消息.
要么
ch <- tryCatch(odbcConnect("TEST"), warning=function(w) {print("FAIL!");return(NA)})
Run Code Online (Sandbox Code Playgroud)
它总是创造ch
变量,但如果失败则NA
有价值.
归档时间: |
|
查看次数: |
18333 次 |
最近记录: |