повторная попытка упорства с обработчиком исключений

Можно tenacityсправиться с этим или я должен сам реализовать оболочку повторных попыток, если мне нужно поймать исключение, сделать обратный вызов и вернуться к следующей попытке?

отправить → ошибка извлечения → если можно восстановить → запустить обратный вызов → повторить попытку отправки

Когда я использую простой случай с этим кодом, следующая попытка никогда не происходит:

      class A:
    a = 0
 
    @retry(stop=stop_after_attempt(7))
    def never_give_up_never_surrender(cls):
        try:
            1/cls.a
            print('possibly wrong')
        except ZeroDivisionError:
            cls.a+=1
            print('next try')
        else:
            print('done')

1 ответ

Есть способ:

      def error_callback(retry_state):
   # error handler
   if isinstance(retry_state._exception(ZeroDivisionError)):
     print("Can't handle it")
   else:
     print("Handled")


@retry(retry_error_callback=error_callback):
def zero_division():
  a = 1 
  b = 0
  a/b

Это явно не описано в документации, но в API.

Другие вопросы по тегам