为什么以下代码不返回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
我怎样才能处理错误但忽略警告?
答案 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