你如何使tryCatch实际捕获错误

时间:2014-08-24 14:04:37

标签: r error-handling try-catch

如果参数不满足许多条件,我必须调用一个抛出错误的函数。

条件非常复杂,我无法在100%的时间内尝试满足它们(我必须重新输入函数在内部检查的所有条件)。 相反,我应该用不同的参数重试(根据需要多次填充我的表格)。

在其他语言中,我可以围绕通话编写一个catch块。

但是,在R中,tryCatch的工作方式似乎有所不同:您可以使用finally=给出代码,但在执行finally-code之后,外部函数无论如何都会终止。

这是一个最小的例子:

sometimesError <- function() {
    if(runif(1)<0.1) stop("err")
    return(1)
}
fct <- function() {
    theSum <- 0
    while(theSum < 20) {
        tryCatch( theSum <- theSum + sometimesError() )
    }
    return(theSum)
}
fct()    # this should always evaluate to 20, never throw error

(我已阅读"Is there a way to source() and continue after an error?",以及其他一些帖子,但我不认为它们适用于此。他们实现源代码继续逐语句而不管错误,就好像它在顶部执行一样另一方面,我对被叫函数终止感到满意,并且应该继续使用调用者代码。

1 个答案:

答案 0 :(得分:1)

您可以将函数传递给error的{​​{1}}参数,以指定出现错误时应该发生的事情。在这种情况下,您可以在出现错误时返回0

tryCatch

正如@rawr在评论中提到的那样,在这种情况下,您也可以将fct <- function() { theSum <- 0 while(theSum < 20) { theSum <- theSum + tryCatch(sometimesError(), error=function(e) 0) } return(theSum) } 替换为tryCatch

try