Python韧性:如果异常不是特定类型的,如何重试?

Python韧性:如果异常不是特定类型的,如何重试?,python,python-3.x,exception,error-handling,python-tenacity,Python,Python 3.x,Exception,Error Handling,Python Tenacity,如果异常不是某种类型的,如何使用Python的韧性重试函数 retry\u if\u exception\u type将在出现特定类型的异常时重试not放在方法或其参数之前似乎不起作用 重试,除非异常类型,否则在另一边,即使没有上升的错误,也会永远循环,直到出现某一类型的上升错误。使用重试,除非异常类型()与尝试后停止()相结合,我可以完成这一点。尝试后停止()可防止无限循环 我必须为此创建自己的类: class retry_if_exception_unless_type(retry_unle

如果异常不是某种类型的,如何使用Python的韧性重试函数

retry\u if\u exception\u type
将在出现特定类型的异常时重试
not
放在方法或其参数之前似乎不起作用


重试,除非异常类型
,否则在另一边,即使没有上升的错误,也会永远循环,直到出现某一类型的上升错误。

使用
重试,除非异常类型()
尝试后停止()
相结合,我可以完成这一点。
尝试后停止()
可防止无限循环

我必须为此创建自己的类:

class retry_if_exception_unless_type(retry_unless_exception_type):
    """Retries until successful outcome or until an exception is raised of one or more types."""

    def __call__(self, retry_state):
        # don't retry if no exception was raised
        if not retry_state.outcome.failed:
            return False
        return self.predicate(retry_state.outcome.exception())

将其分解一点,您希望在以下情况下重试:

  • 提出了一个例外
  • (和)除非例外情况属于某种类型
所以写下:

retry_if_exception_type() & retry_unless_exception_type(ErrorClassToNotRetryOn)
@重试(等待=等待随机指数(乘数=3,最大值=30),停止=尝试后停止(5),重试=真,重试=重试,除非异常类型(NotFoundException))