【问题标题】:Trycatch skipping errors/warningsTrycatch 跳过错误/警告
【发布时间】:2017-02-25 02:34:28
【问题描述】:

我试图了解如何在循环中使用 tryCatch(),它会跳过任何会产生错误的值并移至循环中的下一项。为了理解语法,我创建了一个带有日志的快速循环,如下所示:

i=0
Log<- function(x) {
tryCatch(log(x),
 warning = function(w) {i=i+1;next},
            error = function(e) {i=i+1;next},
                   finally={log(x)}) 
 }

 for(input in (-5:5)) {
   print(paste("log of", input, "=", Log(input)))
 }

我正在尝试跳过任何产生警告或消息的日志值(在这种情况下从 -5 到 0)并对其进行计数(因此 i=0 首先是 i=i+1 )。但是这不起作用,它会产生以下错误:

Error in value[[3L]](cond) : no loop for break/next, jumping to top level

【问题讨论】:

    标签: r debugging try-catch


    【解决方案1】:

    我发现您的原始代码有问题。您在tryCatch 内调用next,它不需要/没有意义。这就是为什么错误消息说没有循环可以中断的原因,因为在调用next 时您的代码不在循环内。相反,只需在警告或错误时增加您的计数器,并让下一次调用 Log() 从函数外部发生。试试这个代码:

    Log <- function(x) {
        tryCatch(log(x),
                 warning = function(w) {i=i+1},
                 error = function(e) {i=i+1},
                 finally = {log(x)}) 
    }
    

    但是你为什么在finally 块中再次调用log(x)?相反,您也许可以完全省略它。

    【讨论】:

    • 我错了,刚刚试了一下,还是一样的错误信息
    猜你喜欢
    • 2017-02-06
    • 2013-02-24
    • 2013-10-26
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 2023-03-08
    • 2021-10-25
    • 2015-07-14
    相关资源
    最近更新 更多