前段时间,我需要一个retry
R 中的函数处理缓慢的服务器响应。该函数将具有以下行为:(尝试一个操作(函数或方法),如果失败,请稍等一下,然后重试)x10
我想出了以下几点:
retry <- function(fun, max_trys = 10, init = 0){
suppressWarnings(tryCatch({
Sys.sleep(0.3);
if(init<max_trys) {fun}
}, error=function(e){retry(fun, max_trys, init = init+1)}))}
效果很好。现在我在Python3中需要相同的东西,所以我尝试编写相同的代码:
import time
def retry_fun(fun, max_trys = 10, init=0):
try:
time.sleep(0.3)
if(init<max_trys):
fun
except:
retry_fun(fun, max_trys, init = init+1)
但是当我运行它时,它使我的内核崩溃。由于我是 Python 的初学者,我不确定是什么导致了崩溃,以及一个函数是否/如何作为参数传递到另一个函数中。
你能帮我一下吗?
除了能够传递函数并通过添加来使用它们之外()
在名称之后(Python 的调用语法),您don't需要使用递归;只需将其放入循环中即可:
import time
def retry(fun, max_tries=10):
for i in range(max_tries):
try:
time.sleep(0.3)
fun()
break
except Exception:
continue
except Exception
应该进行更改以捕获函数可能引发的有意义的异常。使用Exception
(正如我在示例中所做的那样)通常是不好的做法,因为它捕获了大量您可能不希望捕获的异常。
除此之外,使用for-loop
而不是显式的第三个计数器和递归(这会导致大值的调用堆栈很长)更好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)