【发布时间】:2014-01-13 05:47:41
【问题描述】:
我将使用tryCatch 捕获一个错误,并尝试处理该错误。但是,如果我无法在本地处理错误(即委托给调用堆栈中更高层的父函数的错误处理程序),我该如何重新抛出错误?
我尝试使用signalCondition,但没有看到重新抛出的错误,我看到的只是NULL:
> error.can.be.handled <- function(e) F
>
> foo <- function() stop("foo stop!")
> tryCatch(foo(),
+ error = function(e) {
+ if (error.can.be.handled(e)) {
+ # handle error
+ }
+ else
+ signalCondition(e) # Rethrow error
+ }
+ )
NULL # I expected to see 'Error in foo() : foo stop!' here
怎么了?
【问题讨论】:
-
@Martin Morgan 有正确答案,但要添加更多细节,您的版本不起作用,因为
stop除了发出条件信号外,还会输出错误消息并中止执行通过调用中止重启。所以可见的“错误”实际上与默认错误处理程序没有任何关系,它只是stop中的代码,这就是为什么你需要调用stop来实现它并且信号条件还不够。有关详细信息,请参阅stop来源。
标签: r error-handling try-catch