我正在尝试运行一个函数,但了解它是否成功完成、发出错误或警告,我尝试执行以下操作:
ret <- 0
tryCatch(expr = {
cat(non_existing_variable, "\n")
},
error = function(e) {
ret <- 1
cat("Got into error condition!\n")
},
warning = function(w) {
ret <- 2
cat("Got into warning condition!\n")
}
)
cat("ret =", ret, "\n")
但它打印:
Got into error condition!
ret = 0
我预计它会屈服ret = 1
。
这里发生了什么?
该ret
变量被分配在不同的范围内tryCatch
。如果要在父框架中分配,可以在此处<<-
使用运算符进行分配:ret
ret <- 0
tryCatch(expr = {
cat(non_existing_variable, "\n")
},
error = function(e) {
ret <<- 1
cat("Got into error condition!\n")
},
warning = function(w) {
ret <<- 2
cat("Got into warning condition!\n")
}
)
#> Got into error condition!
cat("ret =", ret, "\n")
#> ret = 1
然而,为了避免调用框架中的意外分配,一个更好的方法是让捕获的错误显式返回:
ret <- tryCatch(expr = {
cat(non_existing_variable, "\n")
return(0)
},
error = function(e) {
cat("Got into error condition!\n")
return(1)
},
warning = function(w) {
cat("Got into warning condition!\n")
return(2)
}
)
#> Got into error condition!
cat("ret =", ret, "\n")
#> ret = 1
由reprex 包于 2022-06-15 创建(v2.0.1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句