尝试编写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
答案 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次迭代。