我有一个表达出多个错误的表达式:
stop("first")
stop("second")
stop("third")
print("success")
是否有一种方法可以使该表达式一直运行到最后(并尽可能存储所有错误)?
tryCatch
的问题在于,它会在第一个已处理的条件下停止执行(因此,它将仅打印一次“存在错误”)。
tryCatch({
stop("first")
stop("second")
stop("third")
print("success")
}, error = function(e) print("There was an error"))
我了解到withCallingHandlers
将捕获条件并继续执行,因此我尝试了类似的操作...
withCallingHandlers(
{...},
error = function(e) print("There was an error")
)
...但是,尽管这确实会打印出消息,但在第一个错误之后它也会失败,据我所知,这是因为默认的重新启动只是再次运行了当前行。
我认为我需要做的是编写一个自定义的重启,该重启仅跳过当前表达式并跳至下一个表达式,但是我对此却有些茫然。
(背景:基本上,我正在尝试复制testthat::test_that
内部发生的事情,即使每个失败的期望都引发错误,所有期望都会在退出之前运行)。