我的R代码如下
错误 = 0
for(i in c(1:100)){
tryCatch(expr = {
API Call
}, error = {errors=errors+1}, finally = {})
further code
}
该代码的目的是即使 API 调用失败也能继续执行并计算发生错误的次数。 但我发现,如果迭代中 API 调用出现错误,则不会执行进一步迭代的代码。 如果我使用 try(),那么我将无法计算错误数 请提出解决方案
error=
的
tryCatch
参数应该是一个函数。如果您在 errors <- 0
循环之前预实例化 for
,有几个选项:
我的首选是捕获并检查它是否继承
"error"
:
errors <- 0L
for (...) {
res <- tryCatch({
...API call...
},
error = function(e) e)
if (inherits(res, "error")) {
errors <- errors + 1L
} else {
something else here
}
}
尽管我更喜欢这样的原因可能并不主要是主观的。另一种方式是更内部的:
errors <- 0L
for (...) {
res <- tryCatch({
...API call...
},
error = function(e) { errors <<- errors + 1L; })
something else here
}