RODBC 函数和错误/警告
关于此 R 代码的问题:
library(RODBC)
ch <- tryCatch(odbcConnect("RTEST"),
warning=function(w){print("FAIL! (warning)");return(NA)},
error=function(e){print(paste("ERROR:",geterrmessage()));return(NA)})
df <- tryCatch(sqlQuery(ch,"SELECT Test from tblTest"),
warning=function(w){print("FAIL! (warning)");return(NA)},
error=function(e){print(paste("ERROR:",geterrmessage()));return(NA)})
odbcClose(ch)
在两种情况下(警告和错误部分几乎完全相同),代码都可以很好地处理错误(通过省略代码中所需的参数而强制):我得到一个 NA 值和一条错误消息。
另外,对于 sqlQuery 错误(给出无效的 DSN):NA 值和错误消息。
但不适用于 sqlQuery 的警告。没有消息输出,但 df 包含消息(因此没有 NA)。为什么?
A question about this R code:
library(RODBC)
ch <- tryCatch(odbcConnect("RTEST"),
warning=function(w){print("FAIL! (warning)");return(NA)},
error=function(e){print(paste("ERROR:",geterrmessage()));return(NA)})
df <- tryCatch(sqlQuery(ch,"SELECT Test from tblTest"),
warning=function(w){print("FAIL! (warning)");return(NA)},
error=function(e){print(paste("ERROR:",geterrmessage()));return(NA)})
odbcClose(ch)
Code works fine for errors (forced by omitting the required paramaters in the code) in both cases (warning- and error part are almost exactly the same): I get a NA value and an errormessage.
Also for an error with sqlQuery (give an invalid DSN): NA value and an errormessage.
But not for warnings with sqlQuery. No message output, but df
contains the message (so no NA). Why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我检查了
sqlQuery
的代码,发现:error
isparameter tosqlQuery
, on defaultTRUE
,所以它给出您的字符向量没有错误或警告。如果将其更改为sqlQuery(ch,"SELECT Test from tblTest",FALSE)
,则df
将包含-1
值。这是 C 级别的错误代码,但不是 R 中的错误,因此tryCatch
无法处理它。我想您需要在
tryCatch
之后检查是否df==-1
。I checked code for
sqlQuery
and found this:error
is parameter tosqlQuery
, on defaultTRUE
, so it gives you character vector without error or warning. If you change it tosqlQuery(ch,"SELECT Test from tblTest",FALSE)
thendf
will contain-1
value. This is error code from C-level, but not error in R meaning sotryCatch
could not handle it.I suppose that you need to check if
df==-1
aftertryCatch
.我最终得到了这段代码。现在我可以处理具体的Mysql error_code:
I ended up with this code. Now I can handle the specific Mysql error_code: