热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python错误重试让多少开发者头疼?高效解决方案出炉

###优化后的摘要在处理Python开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity`库提供了一种高效的解决方案。首先,通过`pipinstalltenacity`安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用`|`(或)和`&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity`还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。

在这里插入图片描述


01.安装

pip install tenacity

图片


02.使用


(1)使用规则

● 同一个参数,多个值用 |(或),+(与)进行组合使用

● 不同参数之间,只有组合使用,通过关键字参数传参即可


(2)@retry()【常用】

● 【无条件重试】,只要抛出异常就会重试,直到执行不抛异常

from tenacity import *
一直重试
@retry()
def test_demo():print('执行 test_demo')raise Exception('手动抛出异常')
test_demo()
一直执行 test_demo 函数

(3)@retry(stop=stop_after_attempt(3))【常用】

● 指定【重试的次数】,如 3 次

from tenacity import *
重试 3 次后停止
@retry(stop=stop_after_attempt(3))
def test_demo():print('执行 test_demo')raise Exception('手动抛出异常')
test_demo()
执行三次 test_demo 函数

(4)@retry(stop=stop_after_delay(5))【常用】

● 指定【重试多长时候后停止】,如 5 秒

from tenacity import *
重试 5 秒后停止
@retry(stop=stop_after_delay(5))
def test_demo():print('执行 test_demo')raise Exception('手动抛出异常')
test_demo()

(5)@retry(stop=(stop_after_delay(1) | stop_after_attempt(5)))

● stop_after_delay()和 stop_after_attempt()组合使用,只要其中一个条件满足,任务就停止

from tenacity import *
重试 2 秒或者重试 50 次停止
@retry(stop=(stop_after_delay(2) | stop_after_attempt(50)))
def test_demo():print('执行 test_demo')raise Exception('手动抛出异常')
test_demo()

(6)@retry(wait=wait_fixed(3))【常用】

● 指定每一次【重试时等待时间】,如 3 秒,每一次重试前都要等待 3 秒钟

from tenacity import *
每次重试的等待时间 5 秒
@retry(wait=wait_fixed(5))
def test_demo():print('执行 test_demo')raise Exception('手动抛出异常')
test_demo()

(7)@retry(wait=wait_random(min=1, max=5))

● 【重试时等待时间】在 min,max 之间随机取值

from tenacity import *重试间隔时间 1-5 秒随机
@retry(wait=wait_random(min=1, max=5))
def test_demo():print('执行 test_demo')raise Exception('手动抛出异常')
test_demo()

(8)@retry(wait=wait_fixed(3) + wait_random(0, 2))

● wait_fixed(3) 与 wait_random(0, 2)组合使用,两个条件都满足

● 比如每次等待 3 秒

from tenacity import *
随机等待 0-2 秒和每次等待 3 秒重试都满足才会重试
@retry(wait=wait_fixed(3) + wait_random(0, 2))
def test_demo():print('执行 test_demo')raise Exception('手动抛出异常')
test_demo()

(9)@retry(retry=retry_if_exception_type(IOError))

● 指定特定类型的异常出现时,任务才重试,会一直重试

from tenacity import *
指定 TypeError 才会重复
@retry(retry=retry_if_exception_type(TypeError))
def test_demo():print('执行 test_demo')print('a'+1)
test_demo()

(10)组合使用

@retry(wait=wait_random(min=1, max=5),stop=stop_after_attempt(3))
def test_demo():print('执行 test_demo')raise Exception('手动抛出异常')
test_demo()

在这里插入图片描述

最后: 可以在公众号:伤心的辣条 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!喜欢软件测试的小伙伴们,可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)




好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…


推荐阅读
author-avatar
TC维尼_748
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有