Trycatch跳过错误/警告

时间:2016-10-15 20:25:14

标签: r debugging try-catch

我试图理解如何在循环中使用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

1 个答案:

答案 0 :(得分:0)

我发现原始代码存在问题。您在next内呼叫tryCatch并且不需要/没有意义。这就是为什么错误消息说没有可以中断的循环,因为在调用next时你的代码不在循环内。相反,只需在警告或错误时递增计数器,然后从函数外部调用Log()。试试这段代码:

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

但为什么要在log(x)区块中再次呼叫finally?相反,您可以完全省略它。