我正在使用重试(pip install retrying
)包。
我有这样的功能-
from retrying import retry
from random import randint
def a():
number = randint(0, 10)
if number > 0:
print number
raise Exception("Some exception")
else:
return number
# Case 1
a = retry(a) # This works as expected - i.e. execs until I get a 0
print a()
# Case 2
a = retry(a, stop_max_attempt_number=3)
print a()
在情况2中,stop_max_attempt_number无效。有没有其他方法可以传递函数和关键字arg?
我的用例是,我只想在需要时才装饰函数,因此通常不需要将
@retry(stop_max_attempt_number=3)
放在def a()
之前。 最佳答案
retry
是一个装饰器,可以不带参数或带参数使用。如果给它参数,它将充当装饰器工厂并返回实际的装饰器。调用返回的装饰器:
a = retry(stop_max_attempt_number=3)(a)
因为这等效于使用
retry()
作为装饰器:@retry(stop_max_attempt_number=3)
def a():
# ...
关于python - 如何在关键字参数中使用@retry并传递函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28654280/