在R中的异常处理中分配值

时间:2015-03-10 16:29:02

标签: r exception-handling variable-assignment rcurl

 while(bo!=10){
  x = tryCatch(getURLContent(Site, verbose = F, curl = handle),
            error = function(e) {
               cat("ERROR1: ", e$message, "\n")
               Sys.sleep(1)
               print("reconntecting...")
               bo <- bo+1
               print(bo)
               })
  print(bo)
  if(bo==0) bo=10 
}

我想尝试在连接失败后重新连接每秒。但是bo值的新赋值是无效的。我怎样才能做到这一点?或者,如果您知道如何使用RCurl选项重新连接(我真的没有找到任何东西),那就太棒了。

感谢每一位帮助

2 个答案:

答案 0 :(得分:5)

问题是作业的b0范围。但是,我发现trytryCatch更友好一点。这应该有效:

while(bo!=10){
    x = try(getURLContent(Site, verbose = F, curl = handle),silent=TRUE)
    if (class(x)=="try-error") {
           cat("ERROR1: ", x, "\n")
           Sys.sleep(1)
           print("reconnecting...")
           bo <- bo+1
           print(bo)
     } else {
           break
     } 
}

以上尝试连接10次网站。如果任何一次成功,它就会退出。

答案 1 :(得分:5)

创建tryCatch()范围之外的变量,并使用<<-

进行更新
bo <- 0
while(bo!=10){
    x = tryCatch(stop("failed"),
      error = function(e) {
          bo <<- bo + 1L
          message("bo: ", bo, " " conditionMessage(e))
    })
}

或者使用返回值作为成功的哨兵

x <- 1
while (is.numeric(x)) {
    x = tryCatch({
        stop("failed")
    }, error = function(e) {
        message("attempt: ", x, " ", conditionMessage(e))
        if (x > 10) stop("too many failures", call.=FALSE)
        x + 1
    })
}