首页 > 解决方案 > 使用异常处理程序重试坚韧

问题描述

可以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')

标签: pythontenacity

解决方案


有一种方法:

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 中。


推荐阅读