Python异常处理伴侣 -- tenacity模块使用介绍
我的微信公众号:pyquant

在写代码时经常会遇到对抛出异常的代码进行重试,常见于网页爬虫的代码中,使用计数器 + 循环的方式对抛出异常的代码进行捕获和重试。tenacity是使用Python装饰器模式对方法异常进行捕获,通过灵活的参数实现简单优雅的异常重试。
特性:
- 简单灵活的装饰模式api
- 可以指定重试停止条件(比如:设置重试次数)
- 也可以指定等待条件(比如:使用指数避让间隔重试)
- 自定义触发重试的Exception
- 自定义重试预期的返回结果
- 基于协程的重试
安装方式:
pip install tenacity
API使用介绍
1. @retry
给需要重试的方法加上@retry修饰器之后,方法抛出异常就会被装饰器捕获到并进行重试,异常抛出时会不断重试直到方法成功返回
| |
2. 带终止条件的retry
我们也可以给retry加一个参数设置重试n次后不再重试并抛出异常
| |
使用@stop_after_delay 可以指定重试间隔,比如如下的例子指定10秒后重试
| |
可以使用 “|” 把多个条件组合起来
| |
3. 在重试前等待
使用@wait_fixed 在重试前等待固定时间
| |
随机等待1-2秒钟,这在爬虫爬网页时比较有用
| |
增加指数避让等待间
| |
看一个更复杂点的例子
| |
4. 带触发条件的retry语句
| |
5. 异常处理
虽然tenacity会帮我们处理异常,我们依然可以在重试失败后使用reraise来决定我们时候进行最后的尝试,使用reraise会把异常抛出交给我们的try except来处理
| |
6. 在retry前后增加log
| |
7. 统计异常情况
| |
输出如下内容:
| |
8. 自定义异常回调函数
| |
输出结果为 False