我正在尝试在 R 中实现嵌套的 tryCatch。代码如下:
tryCatch({
a <- 2/'a'
print(a)
print("himanshu")
tryCatch({
a <- 3/'a'
print(a)
print("inner loop")
}, warning = function(war) {
print("Warning in inner tryCAtch")
}, error = function(err) {
print("Error in inner tryCAtch")
})
}, warning = function(war) {
print("Warning in outer tryCAtch")
}, error = function(err) {
print("Error in outer tryCAtch")
})
即使内部块有错误,外部块的消息也会被打印出来。我想要这样的输出:
Error in inner block
Error in outer block
最佳答案
我认为您有两个问题,第一个是 tryCatch() 在发生错误时停止执行 try 块,因此第二个 tryCatch() 永远不会执行。第二个问题是您似乎混合了 try/catch 的目的。
通常,我在以下三种情况之一中使用 tryCatch() (1) 从故障中恢复,(2) 关闭打开的资源,以及 (3) 传递带有更好错误消息的错误。
如果你想从失败中恢复,最好
在你的 try 块中只包含一个语句,否则你的错误处理程序必须有逻辑来识别哪个语句失败了,这会很快变得丑陋。
tryCatch({
a_statement_that_might_fail()
},error = function(err){
recover from failure here
})
如果您只需要更好的错误消息或关闭打开的资源,多语句 try-block 就可以了:
resource <- open_file_or_database()
tryCatch({
lots()
of()
statements()
that()
might()
fail()
},error = function(err){
stop(sprintf('Got this error: %s',err$message))
},finally={
close(resource)
})
关于r - R 中的嵌套 Try Catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35716394/