检测错误时,使用trycatch在下一个循环上运行

时间:2019-10-19 10:23:09

标签: r

尝试编写trycatch函数以检测错误。但是,循环在检测到错误后将无法继续运行。

for(number in 1:10){
    tryCatch({
      user_link = suppressMessages(remoteDriver$findElement(using = 'css selector', x[number]))
    }, error = function(e){ user_link = NA})

    user_link = as.character(user_link$getElementText())

    commentdf1 = data.frame(user_link)
    commentdf = rbind(commentdf,commentdf1)
  }

在循环上运行时,我希望有10条信息。如果输入user_link = NA

时出错

1 个答案:

答案 0 :(得分:0)

我建议尝试找到一种替代tryCatch的用法。它会使代码更难阅读,使意外错误几乎不可检测,并且在tryCatch中使用的任何软件包更改其代码的情况下,您的代码将仅停止工作,而不会产生可识别的错误。

这表示您的问题不在tryCatch函数中,而是在user_link$getElementText()之后紧随其后的调用中,如果tryCatch函数导致错误,它将产生另一个错误。

有几种方法可以解决此问题。最简单的方法就是使用next运算符跳过迭代。在这种情况下,明智的做法是在data.frame中包含成功的迭代。

for(number in 1:10){
    if(isFALSE(
        tryCatch({
        user_link = suppressMessages(
            remoteDriver$findElement(using = 'css selector', x[number])
        )}, error = function(e) FALSE)
        )
      ) next

    user_link = as.character(user_link$getElementText())

    #Include iteration so we can see which succeeded and which did not.
    commentdf1 = data.frame(user_link, iteration = i)
    commentdf = rbind(commentdf,commentdf1)
  }

除了包含迭代之外,您还可以预先创建整个data.frame,并使用commentdf[i, ] <- user_link插入成功的迭代,这也可以加快实现速度(如果您还有更多的选择,这一点非常明显超过20次迭代。