R 无法尝试捕获多个错误
Posted
技术标签:
【中文标题】R 无法尝试捕获多个错误【英文标题】:R cannot trycatch multiple errors 【发布时间】:2021-06-12 04:46:40 【问题描述】:我想在超时错误中捕获无效输入错误。我写的脚本如下。但是,在这种情况下超时不起作用,程序永远运行。任何人都可以请检查并让我知道如何解决它吗?谢谢。
for (lb in 1:100)
rs <- tryCatch(
expr =
cat("helloworld", "\n");
withTimeout(
rs_son = tryCatch(
expr =
flag = FALSE
cat("start solnl", "\n");
ret = solnl(X, objfun = obj, confun = con, lb=lb, ub=ub);
cat("finish solnl", "\n");
,
error = function(e) flag <- TRUE
)
if(flag) next
,
timeout = 10)
,
TimeoutException = function(ex)
cat("Timeout. Skipping.\n")
)
更清楚地说,这就是我想要实现的目标。无论这是对 solnl 函数的无效输入错误还是超时错误,for 循环都应该继续。
【问题讨论】:
【参考方案1】:这里有多个问题。第一,没有循环调用next,第二,flag
只定义在错误处理函数内部,不在tryCatch()
之外,第三,外部tryCatch()
在这里没有影响。
我添加了一些进一步的 cat
消息,希望能对正在发生的事情有所了解
编辑:用正确的 for 循环更新答案
set.seed(0)
rs <- character()
for (lb in 1:10)
rs[lb] <- R.utils::withTimeout(
rs_son = tryCatch(
expr =
flag <- FALSE # has no impact
Sys.sleep(sample(0:2, size = 1))
cat("start solnl", "\n")
ret = solnl(X, objfun = obj, confun = con, lb=lb, ub=ub)
cat("finish solnl", "\n")
,
error = function(e)
cat(as.character(e))
flag <- TRUE # equals return(TRUE)
)
if(rs_son)
return("NEXT OUT")
return("OUT")
,
timeout = 1)
#> Error in Sys.sleep(sample(0:2, size = 1)): reached elapsed time limit
#> start solnl
#> Error in solnl(X, objfun = obj, confun = con, lb = lb, ub = ub): could not find function "solnl"
#> Error in Sys.sleep(sample(0:2, size = 1)): reached elapsed time limit
#> start solnl
#> Error in solnl(X, objfun = obj, confun = con, lb = lb, ub = ub): could not find function "solnl"
#> Error in Sys.sleep(sample(0:2, size = 1)): reached elapsed time limit
#> start solnl
#> Error in solnl(X, objfun = obj, confun = con, lb = lb, ub = ub): could not find function "solnl"
#> Error in Sys.sleep(sample(0:2, size = 1)): reached elapsed time limit
#> Error in Sys.sleep(sample(0:2, size = 1)): reached elapsed time limit
#> start solnl
#> Error in solnl(X, objfun = obj, confun = con, lb = lb, ub = ub): could not find function "solnl"
#> start solnl
#> Error in solnl(X, objfun = obj, confun = con, lb = lb, ub = ub): could not find function "solnl"
rs
#> [1] "NEXT OUT" "NEXT OUT" "NEXT OUT" "NEXT OUT" "NEXT OUT" "NEXT OUT"
#> [7] "NEXT OUT" "NEXT OUT" "NEXT OUT" "NEXT OUT"
【讨论】:
非常感谢您的回复。我没有在开头粘贴 for 循环是我的错(我已经更新了问题)。由于有一个 for 循环,我不能使用 return 命令。您能否提供更多见解如何解决?我的目标是使外部 trycatch() 工作。 更清楚地说,这就是我想要实现的目标。无论这是 solnl 函数的无效输入错误还是超时错误,for 循环都应该继续。 我更新了答案,但仍然看不到外部 tryCatch 的必要性。如您所见,错误是由超时引起的还是因为函数不可用引起的。循环有效,结果保持不变 您有机会查看我的最新答案吗?如果满足您的需求,请将其标记为已接受,否则请发表评论 对不起,我迟到了。但它没有用。在我的情况下,外循环超时不起作用,solnl 卡在中间。 :(以上是关于R 无法尝试捕获多个错误的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的类型错误:尝试使用 React MuiAlert 时无法读取未定义的属性“主”
未捕获的安全错误:无法在“历史记录”上执行“replaceState”:无法在原始“null”的文档中创建