python - 使用异常处理程序重试坚韧
问题描述
可以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')
解决方案
有一种方法:
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 中。
推荐阅读
- java - 如何将位图转换为字节数组android?
- r - 在plotly中将箭头段添加到散点图中
- java - 无法读取 packageName - Android Studio
- node.js - Sublime 文本找不到 Node.js。如何帮助 Sublime 正确找到 Node?
- python - 带有 base10 的 int() 的文字无效
- mysql - 如何在 gnu make makefile 中转义反引号
- javascript - 在javascript中使用child_process执行shell命令
- javascript - 续集创建 2 个条目而不是 1 个
- spring-mvc - 为什么在 SpringBoot 应用程序中从我的测试中删除 WebMvcTest 注释会导致 ComponentScan 失败?
- python-3.x - Python-Beautiful Soup-解析 XML 重复的字符串