如何使用带有关键字参数的@retry 并传递函数
How to use @retry with keyword arguments AND pass a function
我正在使用重试 (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 关键字参数?
我的用例是 想要 只在需要时修饰一个函数,所以将 @retry(stop_max_attempt_number=3)
放在 def a()
之前的典型用法是不是我需要的。
retry
是一个装饰器,可以不带参数使用,也可以带参数使用。如果你给它参数,它将作为一个装饰器 factory 和 return 实际的装饰器。调用那个 returned 装饰器:
a = retry(stop_max_attempt_number=3)(a)
因为这相当于使用 retry()
作为装饰器:
@retry(stop_max_attempt_number=3)
def a():
# ...
我正在使用重试 (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 关键字参数?
我的用例是 想要 只在需要时修饰一个函数,所以将 @retry(stop_max_attempt_number=3)
放在 def a()
之前的典型用法是不是我需要的。
retry
是一个装饰器,可以不带参数使用,也可以带参数使用。如果你给它参数,它将作为一个装饰器 factory 和 return 实际的装饰器。调用那个 returned 装饰器:
a = retry(stop_max_attempt_number=3)(a)
因为这相当于使用 retry()
作为装饰器:
@retry(stop_max_attempt_number=3)
def a():
# ...