Retrying,一个神奇优雅的 Python 库

news/2024/9/23 10:00:28/

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。

一个简单的库,也许能够开启我们的智慧之门,
一个普通的方法,也许能在危急时刻挽救我们于水深火热,
一个新颖的思维方式,也许能激发我们无尽的创造力,
一个独特的技巧,也许能成为我们的隐形盾牌……


神奇的 Python 库之旅,第 4

目录

    • 一、Retrying 简介和安装
    • 二、重试的艺术
    • 三、Retrying 编程示例
    • 四、结语
    • 五、作者Info

一、Retrying 简介和安装

随着 Python 在软件开发领域的广泛应用,我们经常会遇到一些需要重试的情况。

无论是网络请求失败、数据库连接超时还是其他异常情况,这些都可能导致程序执行失败,身为程序员,每次想到程序可能会崩,就会。。
在这里插入图片描述

虽然使用递归算法进行重试也是一个不错的选择,但是递归是有限制的,当达到一定次数时会发生堆栈溢出错误,而且还要细心的编写重试逻辑,稍不注意就会出错。

谁来救救我们这些真诚善良,勤勤恳恳的程序员呢?

这时,有一个神奇的 Python 第三方库应运而生,它就是 retrying。让我们一起来揭开 retrying 库的神秘面纱,让 Python 重试变得轻松愉快!

二、重试的艺术

在编写 Python 程序时,我们常常需要处理一些不可控的情况,比如网络不稳定、外部 API 响应缓慢等。

这时,我们希望程序能够自动重试,直到成功为止。而 retrying 库就是为了解决这个问题而生的,它让重试变得如此简单。

安装 retrying

python">pip install retrying

安装完成后,我们就可以在Python代码中引入retrying库,并开始使用它提供的强大功能了。

三、Retrying 编程示例

轻松处理网络请求
假设我们需要从一个外部 API 获取数据,但由于网络原因,可能会偶尔失败。这时,我们可以使用 retrying 库来处理重试逻辑,代码如下:

python">from retrying import retry
import requests@retry
def fetch_data():response = requests.get("https://example.com/api/data")if response.status_code != 200:print("Fetching data failed, retrying...")raise Exception("Fetch data failed")else:print("Fetching data success")return response.json()try:data = fetch_data()print("Data:", data)
except Exception as e:print("Error occurred:", e)

在这个示例中,我们使用 @retry 装饰器将 fetch_data 函数标记为需要重试的函数。当函数执行时,如果请求失败(status_code 不为 200),则触发重试逻辑,直到成功为止。

设置重试次数和间隔时间
retrying 库还支持设置重试次数和重试间隔时间,以满足不同的重试需求。例如,我们可以设置最大重试次数为 3 次,每次重试之间间隔 1 秒:

python">from retrying import retry
import requests@retry(stop_max_attempt_number=3, wait_fixed=1000)
def fetch_data():response = requests.get("https://example.com/api/data")if response.status_code != 200:print("Fetching data failed, retrying...")raise Exception("Fetch data failed")else:print("Fetching data success")return response.json()try:data = fetch_data()print("Data:", data)
except Exception as e:print("Error occurred:", e)


高级用法
返回结果为 None 时重试(条件不唯一,比如我们也可以在返回结果为空字符串时重试):

python">@retry(retry_on_result=lambda x: x is None
)

发生指定异常时重试:

python">@retry(retry_on_exception=lambda x: isinstance(x, ValueError)
)

当我们不知道具体是什么异常时,也可指定为所有异常的父类:

python">@retry(retry_on_exception=lambda x: isinstance(x, Exception)
)


更多功能、详细用法可参考官方文档:

https://pypi.org/project/retrying


应用场景
retrying 库广泛应用于各种需要重试操作的场景,比如网络请求、数据库连接、文件 IO 等。它可以帮助我们处理程序中的不稳定因素,提高程序的稳定性和可靠性。

四、结语

通过本文的介绍,相信你已经对 retrying 库有了一定的了解。它的强大功能和简单易用的接口让我们能够轻松处理重试逻辑,让程序变得更加健壮。

如果你还没有尝试过 retrying 库,赶快动手试一试吧,相信它会成为你编写 Python 程序的得力助手!

愿你在编程的路上越走越远,越来越有趣!

五、作者Info

Author:小鸿的摸鱼日常

Goal:让编程更有趣! 专注于Web开发、爬虫,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!

版权说明:本文禁止抄袭、转载,侵权必究!


http://www.ppmy.cn/news/1461903.html

相关文章

OpenAI GPT-4o震撼登场:实时响应、全能交互的AI新体验、再登新峰!

OpenAI 刚刚发布了 GPT-4o,这是一种新的人工智能模式,集合了文本、图片、视频、语音的全能模型。 能实时响应用户的需求,并通过语音来实时回答你,你可以随时打断它。 还具有视觉能力,能识别物体并根据视觉做出快速的响…

使用html和css实现个人简历表单的制作

根据下列要求,做出下图所示的个人简历(表单) 表单要求 Ⅰ、表格整体的边框为1像素,单元格间距为0,表格中前六列列宽均为100像素,第七列 为200像素,表格整体在页面上居中显示; Ⅱ、前…

IP代理中的SOCKS5代理是什么?安全吗?

在互联网世界中,网络安全和个人隐私保护变得日益重要。SOCKS5代理作为一种安全高效的网络工具,不仅可以保护个人隐私安全,还可以提供更稳定、更快度的网络连接。本文将带大家深入了解SOCKS5代理在网络安全领域中的应用。 什么是SOCKS5代理 …

设计模式——备忘录模式(Memento)

备忘录模式(Memento Pattern),也称为快照模式或Token模式,是GoF(Gang of Four,四位设计模式专家)提出的23种设计模式之一,属于行为模式。该模式的主要目的是在不破坏封装性的前提下&…

react-native 渲染引擎经历了什么

React Native 的渲染引擎经历了多个迭代,不断优化和改进。以下是一些较为显著的迭代: 原生组件封装:最初的 React Native 版本是通过 JavaScript 渲染 UI,并通过桥接层将 UI 转化为原生组件。随着发展,React Native 开…

【C语言】5.C语言函数(1)

文章目录 1.函数的概念2.库函数2.1 标准库和头文件2.2 库函数的使⽤⽅法2.2.1 学习和使用2.2.2 头⽂件包含2.2.3库函数文档的一般格式 3.⾃定义函数3.1 函数的语法形式 4.形参和实参4.1 实参4.2 形参4.3 实参和形参的关系 5.return 语句6.数组做函数参数 1.函数的概念 函数也称…

git cherry-pick命令使用

git cherry-pick 是一个非常实用的Git命令,它允许你将一个或多个提交从一个分支复制并应用到另一个分支上,而不需要进行整个分支的合并。这对于只想将某些特定更改而非整个分支历史引入当前工作的情况非常有用。以下是使用 git cherry-pick 的基本步骤和…

Gini Impurity(基尼不纯度)

基尼不纯度:衡量集合的无序程度; 基尼不纯度 基尼不纯度:将来自集合的某种结果随机应用于某一数据项的预期误差率。 1、显然基尼不纯度越小,纯度越高,集合的有序程度越高,分类的效果越好; 2、…