如何使用带有关键字参数的@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():
    # ...