热门标签 | 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就知足了…

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

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

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

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


推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文将介绍由密歇根大学Charles Severance教授主讲的顶级Python入门系列课程,该课程广受好评,被誉为Python学习的最佳选择。通过生动有趣的教学方式,帮助初学者轻松掌握编程基础。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 深入解析JMeter中的JSON提取器及其应用
    本文详细介绍了如何在JMeter中使用JSON提取器来获取和处理API响应中的数据。特别是在需要将一个接口返回的数据作为下一个接口的输入时,JSON提取器是一个非常有用的工具。 ... [详细]
  • #点球小游戏fromrandomimportchoiceimporttimescore[0,0]direction[left,center,right]defkick() ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
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社区 版权所有