Python 使用动态参数重试

retryingtenacity python 库中尝试过,但无济于事。

重试通常与装饰器一起使用,例如如下元代码所示:

class FooBar:

   @retry(attempts=3)
   def dosomething():
      ...

我希望重试参数可以在类上配置

class FooBar:
   def __init__(retries=0):
       self.retries = retries

   @retry(attempts=self.retries)
   def dosomething():
      ...

显然这会中断,因为装饰器无法访问对象属性(即无法访问 self )。所以认为这会起作用:

def dosomething():
   with retry(attempts=self.retries):
       ...

但是这两个库都不允许在 with 块中调用重试

>  with retry():
E  AttributeError: __enter__

用动态参数包装重试逻辑的首选方法是什么?

stack overflow Python retry with dynamic parameters
原文答案