迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 版本降级

发布时间:2023/05/11 浏览次数:74 分类:Python

本教程将演示如何根据我们在不同设备上的需求对 Python 进行降级。 我们将讨论适用于 Windows、Linux 和 Mac 设备的方法。

使用 pip 安装Python版本

发布时间:2023/05/11 浏览次数:158 分类:Python

我们将介绍如何在 Python 中使用 pip 安装特定版本的包。 我们将简要介绍软件包的版本以及应该安装的时间和版本。使用 pip 安装特定的 Python 版本

在 Python 2 和 3 之间切换

发布时间:2023/05/11 浏览次数:170 分类:Python

本文将展示如何在 Python 2 和 3 之间切换以运行 Python 代码。在 Python 2 和 3 之间切换 对于不同的操作系统,切换方式会有所不同;

Python 中的循环向后迭代

发布时间:2023/05/11 浏览次数:183 分类:Python

在这篇简短的文章中,我们将讨论和实现循环。 我们在 Python 中使用不同的反向循环方式。 循环是数字的迭代,我们讨论反向迭代。

在 Python 循环中跳过迭代

发布时间:2023/05/11 浏览次数:188 分类:Python

本文介绍了在 Python 中跳过特定循环迭代的不同方法。使用 try-except 语句继续跳过 Python 循环中的迭代 使用 if-else 语句继续跳过 Python 循环中的迭代

Django 中的 Slug

发布时间:2023/05/04 浏览次数:173 分类:Python

本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。

Django ALLOWED_HOSTS 介绍

发布时间:2023/05/04 浏览次数:182 分类:Python

本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。

Django 中的 Select_related 方法

发布时间:2023/05/04 浏览次数:129 分类:Python

本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便