【问题标题】:Assigning a value in exception handling in R在 R 中的异常处理中赋值
【发布时间】:2015-03-10 16:29:02
【问题描述】:
 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 选项重新连接(我真的没有找到任何东西),那就太棒了。

感谢每一个帮助

【问题讨论】:

    标签: r exception-handling variable-assignment rcurl


    【解决方案1】:

    问题在于分配的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 次连接到该站点。如果任何一次成功,它就会退出。

    【讨论】:

      【解决方案2】:

      tryCatch()范围外创建一个变量,并使用&lt;&lt;-更新

      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
          })
      }
      

      【讨论】:

      • 我使用了 try 选项,但您的方式将有助于更复杂的编码。谢谢你^^
      猜你喜欢
      • 2020-08-23
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多