我正在尝试在 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")
})
Run Code Online (Sandbox Code Playgroud)
即使内部块中有错误,外部块的消息也会被打印。我想要的输出如下:
Error in inner block
Error in outer block
Run Code Online (Sandbox Code Playgroud)
我认为你有两个问题,第一是 tryCatch() 在发生错误时停止执行 try 块,因此第二个 tryCatch() 永远不会执行。第二个问题是你似乎混合了 try/catch 的目的。
一般来说,我在以下三种情况之一中使用 tryCatch():(1) 从故障中恢复,(2) 关闭打开的资源,以及 (3) 使用更好的错误消息传递错误。
如果您尝试从失败中恢复,最好在 try 块中只包含一个语句,否则您的错误处理程序必须具有识别哪个语句失败的逻辑,这可能会很快变得丑陋。
tryCatch({
a_statement_that_might_fail()
},error = function(err){
recover from failure here
})
Run Code Online (Sandbox Code Playgroud)
如果您只需要更好的错误消息或关闭开放资源,那么多语句 try 块就可以了:
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)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4552 次 |
| 最近记录: |