我正在使用重试(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/

10-12 21:08