在 R 中的异常处理中赋值
Assigning a value in exception handling in R
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 选项重新连接(我真的什么也没找到),那就太棒了。
感谢您的帮助
问题是赋值的 b0
范围。但是,我发现 try
比 tryCatch
更友好一点。这应该有效:
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 次。如果这一次成功,它就会退出。
创建一个超出 tryCatch()
范围的变量,并使用 <<-
更新
bo <- 0
while(bo!=10){
x = tryCatch(stop("failed"),
error = function(e) {
bo <<- bo + 1L
message("bo: ", bo, " " conditionMessage(e))
})
}
或者使用 return 值作为成功的标志
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
})
}
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 选项重新连接(我真的什么也没找到),那就太棒了。
感谢您的帮助
问题是赋值的 b0
范围。但是,我发现 try
比 tryCatch
更友好一点。这应该有效:
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 次。如果这一次成功,它就会退出。
创建一个超出 tryCatch()
范围的变量,并使用 <<-
bo <- 0
while(bo!=10){
x = tryCatch(stop("failed"),
error = function(e) {
bo <<- bo + 1L
message("bo: ", bo, " " conditionMessage(e))
})
}
或者使用 return 值作为成功的标志
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
})
}