r - R 中的嵌套 Try Catch

标签 r

我正在尝试在 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/

相关文章:

r - dcast 中的自定义聚合函数

r - 是否有从英文名字中确定性别的软件包?

r - 如何从 RMarkdown 文档中正确编号 Word 中的标题

r - 在 R Plotly 中定义调色板颜色顺序

r - 如何使用 Stringr 检查向量是否包含 R 中的数字?

r - 如何在直方图上绘制密度估计?

r - 合并 R 中的两个图。第二个情节正在取代第一个

r - 如何在 Ubuntu 中安装 R 包 "udunits2"

r - 为什么不能在 `value.var` 中有几个 `dcast` ?

r - 增加 ggplot 中的绘图区域以处理绘图边缘的 geom_text