如何使tryCatch实际捕获错误

如何使tryCatch实际捕获错误,r,error-handling,try-catch,R,Error Handling,Try Catch,如果参数不满足很多条件,我必须调用一个抛出错误的函数 条件非常复杂,我无法在100%的时间内尝试满足它们(我必须重新键入函数内部检查的所有条件)。 相反,我应该用不同的参数重试调用(尽可能多次地填充我的表) 在其他语言中,我可以围绕调用编写catch块 然而,在R tryCatch中,工作方式似乎有所不同:您可以使用finally=来给出代码,但是在执行finally代码之后,外部函数仍然会终止 下面是一个简单的例子: sometimesError <- function() {

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

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

在其他语言中,我可以围绕调用编写catch块

然而,在R tryCatch中,工作方式似乎有所不同:您可以使用
finally=
来给出代码,但是在执行finally代码之后,外部函数仍然会终止

下面是一个简单的例子:

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

sometimesError您可以将一个函数传递给
tryCatch
error
参数,以指定出现错误时应执行的操作。在这种情况下,当出现错误时,可以只返回0

fct <- function() {
  theSum <- 0
  while(theSum < 20) {
    theSum <- theSum + tryCatch(sometimesError(), error=function(e) 0)
  }
  return(theSum)
}

使用
try(,silent=TRUE)
而不是
tryCatch
在这里给你想要的东西吗?我几天前做了类似的事情,我会检查…Facepalm。它起作用了!请创建一个简短的答案,我会接受它。谢谢@罗尔。脸掌。它起作用了!请创建一个简短的答案,我会接受它。谢谢
fct <- function() {
  theSum <- 0
  while(theSum < 20) {
    try(theSum <- theSum + sometimesError(), silent=TRUE)
  }
  return(theSum)
}