повторная попытка упорства с обработчиком исключений
Можно
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.