如何让retry decorator指示已使用所有重试?

2024-10-03 11:25:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的代码中实现了retry decorator,但是想以某种方式指出它何时使用了所有的重试。我该怎么做?在

我正在使用retrying decoratorv1.3.3。在

我尝试使用stop_func,但这似乎是在名义行为中调用的,而不是在重试时调用。在

我不知道如何从装潢工那里调出试拨号码。在

from retrying import retry

def _query_with_retries(self):
    _retriable_query = retry(stop_max_attempt_number=3,
                             wait_incrementing_start=50,
                             wait_incrementing_increment=10)(self._query)
    return _retriable_query()

目前,我的代码只是在最后一次重试时抛出一个泛型异常。我想可以留言“所有重试已用完”或类似的东西。在


Tags: 代码self方式decoratorquery号码funcstop
1条回答
网友
1楼 · 发布于 2024-10-03 11:25:40

您可以捕获在装饰器停止重试时引发的retrying.RetryError异常;请在您自己的包装器装饰器中执行此操作:

from functools import wraps
from retrying import retry, RetryError

def printing_retry(*args, **kwargs):
    def decorator(f):            
        decorated = retry(*args, **kwargs)(f)
        @wraps(decorated)
        def wrapper(*args, **kwargs):
            try:
                return decorated(*args, **kwargs)
            except RetryError:
                print("All retries have been used up")
                # optionally, re-raise the exception at this point
                # raise
        return wrapper
    if len(args) == 1 and callable(args[0]):
        return decorator(args[0])
    return decorator

此修饰符将替换代码中的@retry修饰符;当您调用修饰函数时,它将捕获在函数尝试用尽时引发的RetryError异常,并打印出一条消息。在

如果要在RetryException异常中包装重试过程中引发的任何异常,请记住设置wrap_exception=True。在

演示:

^{pr2}$

相关问题 更多 >