我正在处理 R 和网页之间的套接字连接。该代码运行良好,但有时会由于许多可能的原因之一而停止。例如,最常见的 R 会关闭套接字并发出如下警告:
“handle_read_frame 错误:websocketpp.transport:7(文件结尾)” “未处理的承诺错误:无效状态”
但其他停止原因可能包括服务器停止通信、服务器要求确认等。
解决办法是重新启动连接。
我已将所有这些功能放入一个函数中,并希望使用 trycatch 函数创建一个无限循环,并在失败时再次尝试该函数。不幸的是,这不起作用,因为有时连接只是因警告而停止,而不是错误。
我相信,下面的代码抓住了问题的本质:
Connect<- function() {X= runif(1); if (X < .5 ) stop(); Sys.sleep(1); return(X) } #stopping function
p=1
while (p==1){
tryCatch({Connect()}, error=function(e) {Connect()})
}
人们会期望这段代码总是不间断地打印一个随机数。 问题是,如何实现一个无限循环,在每次因任何原因失败时重新运行可能失败的函数?
不要在错误处理程序中再次调用停止函数,而是将其保留(可以选择打印错误消息),否则在失败时将再次运行停止函数,而不会尝试捕获更多错误。您也可以类似地捕获警告:
Connect <-
function() {
Sys.sleep(0.1)
X = runif(1)
if (X < .5) stop("Oops too low!")
if (X > 0.9) warning("This is a high X!"); return(NA)
return(X)
}
while (TRUE) {
tryCatch({
Connect()
}, error = function(e) {
print(e)
}, warning = function(w) {
print(w)
})
}