【发布时间】:2015-11-17 00:43:19
【问题描述】:
似乎withCallingHandlers 实际上并没有像tryCatch 那样捕获错误并且脚本仍然停止执行。
将 sn-p 与 tryCatch 进行比较,其中 "before" 和 "after" 都被打印:
f1 <- function() {
cat("before tryCatch\n")
tryCatch({
stop("this is an error!")
},
error = function(cond) {
print(cond$message)
}
)
cat("after tryCatch\n")
}
使用与withCallingHandlers 相同的 sn-p,不打印“之后”并停止执行:
f2 <- function() {
cat("before tryCatch\n")
withCallingHandlers({
stop("this is an error!")
},
error = function(cond) {
print(cond$message)
}
)
cat("after tryCatch\n")
}
我做错了什么?
一些背景
我想使用withCallingHandlers 来分析使用sys.calls() 发生错误时的调用堆栈。
根据Advanced R 应该是可以的:
withCallingHandlers()中的处理程序在生成条件的调用上下文中调用,而tryCatch()中的处理程序在tryCatch()的上下文中调用。
【问题讨论】:
-
似乎用
tryCatch包裹withCallingHandlers可以解决问题,但看起来有点丑。 -
简单地说
withCallingHandlers中的error参数用于向函数发出错误信号,但没有建立从错误中恢复的错误处理程序。这只能通过使用tryCatch来实现。
标签: r error-handling