避免tryCatch在发生故障时返回一些内容

时间:2015-04-24 13:04:47

标签: r error-handling try-catch

在tryCatch函数中,我想在tryCatch失败时不返回NULL或其他任何东西。

当您为一个对象分配一个表达式时,如果该对象已经存在则该表达式返回错误,则其值未被更改,例如:

> x <- 1
> x
[1] 1
> x <- x + "a"
Error in x + "a" : non-numeric argument to binary operator
> x
[1] 1

我希望使用tryCatch具有相同的行为。所以在这个例子中,tryCatch失败了&#34; x&#34;仍然是&#34; 1&#34;而不是NULL。

f <- function(x){
  tryCatch(
    expr = {
      x <- 1 + x
      return(x)
    }, error = function(cond){
      message("error")
    })
}

> x <- f(1)
> x
[1] 2
> x <- f("a")
error
> x
NULL

使用stop做诀窍:

f <- function(x){
  tryCatch(
    expr = {
      x <- 1 + x
      return(x)
    }, error = function(cond){
      stop("error")
    })
}

> x <- f(1)
> x
[1] 2
> x <- f("a")
Error in value[[3L]](cond) : error
> x
[1] 2

但即使我可以修改第二部分,stop也不会产生有用的错误信息,即第一部分&#34;错误值[3L]:&#34;

还有其他办法吗?感谢。

1 个答案:

答案 0 :(得分:2)

如果您只是希望stop不包含错误消息的开头部分,您只需将call.参数设置为FALSE

f <- function(x){
    tryCatch(
        expr = {
            x <- 1 + x
            return(x)
        }, error = function(cond){
            stop("non-numeric argument to binary operator", call.=FALSE)
        })
}
x <- 1
x <- f("a")

Error: non-numeric argument to binary operator 

x
[1] 1