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

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

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

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

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


推荐阅读
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • Python入门:第一天准备与安装
    本文详细介绍了Python编程语言的基础知识和安装步骤,帮助初学者快速上手。涵盖Python的特点、应用场景以及Windows环境下Python和PyCharm的安装方法。 ... [详细]
  • 深入解析 HDFS Federation:多命名空间架构详解
    HDFS Federation 是一种扩展 HDFS 架构的方式,通过引入多个独立的 NameNode 来解决单点故障和性能瓶颈问题。本文将详细探讨 HDFS Federation 的工作原理、优势以及潜在挑战。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文介绍了在安装或运行 Python 项目时遇到的 'ModuleNotFoundError: No module named setuptools_rust' 错误,并提供了解决方案。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 在学习网页爬虫时,使用Selenium进行自动化操作。初次安装selenium模块后,第二天运行代码时遇到了ImportError:无法从'selenium'导入名称'webdriver'。本文将详细解释该问题的原因及解决方案。 ... [详细]
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社区 版权所有