tryCatch:为什么警告被处理为错误?

时间:2014-10-28 19:45:23

标签: r try-catch

为什么以下代码不返回2但是将警告作为错误处理?

tryCatch({
  1+1
  warning("test")
  return(2)
}, error=function(e){
  print("error")
}, finally = {})

[1] "error"
Warning message:
In doTryCatch(return(expr), name, parentenv, handler) : test

我怎样才能处理错误但忽略警告?

1 个答案:

答案 0 :(得分:6)

当您手动触发warning时,您的表达式也会抛出错误,因为您在函数之外使用return

如果您在function(e)内返回错误消息本身(而不是打印“错误”),则会更加明显:

tryCatch({
  1+1
  warning("test")
  return(2)
}, error=function(e) {
  e
})

# <simpleError in doTryCatch(return(expr), name, parentenv, handler): 
#  no function to return from, jumping to top level>
# Warning message:
# In doTryCatch(return(expr), name, parentenv, handler) : test

(注意这相当于排除error参数。)

如果您在R控制台上输入return(2),则会显示相同的错误消息:

return(2)
# Error: no function to return from, jumping to top level

要解决此问题,请从表达式中删除return调用,如下所示:

tryCatch({
  1+1
  warning("test")
  2
}, error=function(e){
  print('error')
})

# [1] 2
# Warning message:
# In doTryCatch(return(expr), name, parentenv, handler) : test