如何在 R 中发生任何类型的故障时永远重试函数?

问题描述 投票:0回答:1

我正在处理 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()})
}

人们会期望这段代码总是不间断地打印一个随机数。 问题是,如何实现一个无限循环,在每次因任何原因失败时重新运行可能失败的函数?

r dplyr websocket try-catch
1个回答
0
投票

不要在错误处理程序中再次调用停止函数,而是将其保留(可以选择打印错误消息),否则在失败时将再次运行停止函数,而不会尝试捕获更多错误。您也可以类似地捕获警告:

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)
  })
}
© www.soinside.com 2019 - 2024. All rights reserved.