迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

在 Python 中重试循环

作者:迹忆客 最近更新:2023/05/10 浏览次数:

while 或 for 循环非常适合重复代码块,当我们需要尝试某个操作的次数已知或未知时,我们经常使用它们。 但是,在某些情况下,我们可能需要重试单个循环,因为它应该尝试的操作没有发生或返回了错误。

像这样的情况发生在随机的,或者尤其是网络/请求操作中。 通常,这些操作有效但可能经常失败,这就是重试装饰器可以发挥作用的地方。

本文将讨论我们将如何处理此类情况并在 Python 中重试循环。


在 Python 中使用 @retry 重试循环操作

我们可以使用 tenacity 库重试装饰器来重试循环操作,您可以在 Python 重试装饰器指南中了解更多相关信息。

要安装 tenacity 库,我们可以使用 pip 命令:

$ pip install tenacity

为了展示案例场景,我们将创建一个函数,根据给定的开始和结束参数(将由用户定义)随机生成数字。 但是,此 generateRandomly 函数只会返回一个小于或等于二十 (20) 的数字。

如果数字大于 20,则会引发 ValueError。

import random

userStartInput = int(input("Enter Start Number: "))
userEndInput = int(input("Enter End Number: "))

def generateRandomly(start, end):
    generateNum = random.randint(start, end)
    if generateNum > 20:
        print("Tried")
        raise ValueError("Number generated isn't within range")
    else:
        return generateNum

for i in range(0, 20):
    print(generateRandomly(userStartInput, userEndInput))

代码的输出:

Enter Start Number: 12
Enter End Number: 50
Tried
Traceback (most recent call last):
  File "C:\Users\akinl\Documents\Python\SFTP\test.py", line 17, in <module>
    print(generateRandomly(userStartInput, userEndInput))
  File "C:\Users\akinl\Documents\Python\SFTP\test.py", line 11, in generateRandomly
    raise ValueError("Number generated isn't within range")
ValueError: Number generated isn't within range

用户输入12和50,第一个随机数在20以上; 因此,它引发了 ValueError。 但是,使用 tenacity 提供的重试装饰器,我们可以重试相同的循环,直到它给我们的数字小于或等于 20。

import random
from tenacity import retry

userStartInput = int(input("Enter Start Number: "))
userEndInput = int(input("Enter End Number: "))

@retry
def generateRandomly(start, end):
    generateNum = random.randint(start, end)
    if generateNum > 20:
        print("Tried")
        raise ValueError("Number generated isn't within range")
    else:
        return generateNum

for i in range(0, 20):
    print(generateRandomly(userStartInput, userEndInput))

代码的输出:

Tried
Tried
Tried
13
Tried
15
Tried
Tried
Tried
Tried
Tried
Tried
Tried
Tried
15
Tried
Tried
Tried
Tried
Tried
16
20
18
Tried
16
Tried
Tried
Tried
18
19
Tried
Tried
Tried
14
Tried
20
Tried
Tried
Tried
19
Tried
Tried
Tried
15
13
14
Tried
12
Tried
Tried
Tried
Tried
Tried
Tried
20
Tried
15
19
Tried
20

我们引入了 print("Tried") 来向您展示 generateRandomly 函数在给出小于或等于 20 的数字之前重试了多少次。没有 Tried,输出看起来更像这样。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Pandas read_csv()函数

发布时间:2024/04/24 浏览次数:254 分类:Python

Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。

Pandas 追加数据到 CSV 中

发布时间:2024/04/24 浏览次数:352 分类:Python

本教程演示了如何在追加模式下使用 to_csv()向现有的 CSV 文件添加数据。

Pandas 多列合并

发布时间:2024/04/24 浏览次数:628 分类:Python

本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。

Pandas loc vs iloc

发布时间:2024/04/24 浏览次数:837 分类:Python

本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便