我正在使用重试(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没有效果。是否有不同的方式传递函数, AND 关键字arg?
我的用例是我想要只在需要时装饰一个函数,所以在@retry(stop_max_attempt_number=3)
之前放置def a()
的典型用法并不是我需要的。
答案 0 :(得分:2)
retry
是一个装饰器,可以不带参数使用,也可以使用。如果您给它参数,它将作为装饰器工厂并返回实际的装饰器。调用返回的装饰器:
a = retry(stop_max_attempt_number=3)(a)
因为这相当于使用retry()
作为装饰器:
@retry(stop_max_attempt_number=3)
def a():
# ...