我正在使用R和网页之间的套接字连接。代码运行良好,但在随机时间,它会因为许多可能的原因之一而停止。例如,最常见的R关闭套接字时会发出警告,如:
“handle_read_frame错误:websocketpp. transfer:7(End of File)”“未处理的promise错误:无效状态”
但是停止的其它原因可以包括服务器停止通信、服务器请求确认等。
解决方案是重新启动连接。
我已经把所有这些功能都放在一个函数中,并希望使用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()})
}
人们期望这段代码总是不停地打印一个随机数。问题是如何实现一个无限循环,在每次失败时,无论出于何种原因,都重新运行一个可能失败的函数?
1条答案
按热度按时间2uluyalo1#
不要在错误处理程序中再次调用停止函数,而是将其删除(可选地打印错误消息),否则失败时,它将再次运行停止函数,而不会尝试捕获更多错误。你也可以用类似的方式来警告:
while
循环的另一种方法是创建一个安全调用函数,其中包含tryCatch
语句,并在完成tryCatch
语句时递归调用该函数:旁注-不要在
finally
语句中尝试递归调用今天我学到了这个崩溃的R:
更新-失败时重复