Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用动态参数重试Python_Python_Retrying_Tenacity - Fatal编程技术网

使用动态参数重试Python

使用动态参数重试Python,python,retrying,tenacity,Python,Retrying,Tenacity,在和python库中尝试了这一点,但没有效果 重试通常与装饰器一起使用,例如,如下面的元代码所示: class FooBar: @retry(attempts=3) def dosomething(): ... 我想在类上配置重试参数 class FooBar: def __init__(retries=0): self.retries = retries @retry(attempts=self.retries) def dosom

在和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):
       ...
但这两个库都不允许在带有块的
中调用retry

>  with retry():
E  AttributeError: __enter__

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

您不需要将除臭剂与
@
语法一起使用-它们也可以用作函数

from tenacity import retry, stop_after_attempt

class CustomClass:
    def __init__(self, retries):
        decorator = retry(stop=stop_after_attempt(retries), reraise=True)
        self.method_with_retry = decorator(self.method)
    
    def method(self, x):
        print('Trying...')
        if x % 2:
            raise ValueError
        return x

CustomClass(3).method_with_retry(11)

请问。。。什么是坚韧?这是它唯一的问题,所以我想你已经创建了它。我没有创建韧性-它是python中
重试
库的一个分支,显然自2016年以来就不再开发,并且有bug。我在相关的线程中看到了
韧性
退避
列为备选方案。我刚刚创建了标签,因为它至少在几个不同的线程中被提到过。