当您手动触发warning
时,由于您在函数外使用return
,因此表达式也会引发错误。
如果您在function(e)
返回错误信息本身(而非打印的“错误”),这变得更加明显:(注意,这相当于不包括error
参数)
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
这是,如果你在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
不要使用'return'。只要'2'就足够了。 – jbaums 2014-10-28 19:48:42
@jbaums在意识到我的愚蠢之后,我意识到你的建议完全解决了这个问题,因为错误来自于他们使用函数返回。 – Dason 2014-10-28 19:56:12
非常感谢! – Rentrop 2014-10-28 19:58:14