Python 重试库用法总结
·
一,重试的常见用例
重试库 tenacity 。
关于重试的几点说明:
- 重试是对整个方法再次从头执行一遍,所以在添加 “重试” 的逻辑时,需要考虑重试的力度
- 可以对指定的异常进行重试,非指定异常不重试
- 异常如果被
except捕获,如果不抛出去,则方法没有异常,@retry会失效
from tenacity import (
retry,
retry_if_exception_type,
stop_after_attempt,
wait_exponential,
)
raise_again_attempt = 0
swallow_exception_attempt = 0
# 装饰器
@retry(
# 触发重试的异常类型
retry=retry_if_exception_type(ValueError),
# 重试次数
stop=stop_after_attempt(3),
# 指数退避策略。 multiplier 表示每次重试间隔时间的基数(可理解为第一次等待的时间), min 最少间隔时间,max 最大间隔时间
wait=wait_exponential(multiplier=0, min=0, max=0),
# 重试次数耗尽后,抛出什么异常。True 表示抛出业务原始异常, False 表示抛出 tenacity 自己封装的 RetryError
reraise=True,
)
def raise_again_demo():
"""函数内部 catch 后继续 raise:每次重试都会执行 except 和 finally。"""
global raise_again_attempt
raise_again_attempt += 1
try:
print(f"\n第 {raise_again_attempt} 次进入 raise_again_demo")
print("业务代码:准备抛出异常")
raise ValueError("模拟业务异常")
except Exception as exc:
print(f"函数内部 except/catch 执行了:{exc!r}")
raise
finally:
print("函数内部 finally 执行了")
if __name__ == "__main__":
try:
raise_again_demo()
except Exception as exc:
print(f"main 最终捕获到异常:{exc!r}")
更多推荐



所有评论(0)