首页 > 编程语言 >Python异常处理模块——retrying

Python异常处理模块——retrying

时间:2023-04-10 12:04:39浏览次数:57  
标签:exception retry raise Python 重试 retrying 模块 def wait

https://zhuanlan.zhihu.com/p/420964250

安装

pip install retrying

使用

retrying 提供一个装饰器函数 retry,被装饰的函数会在运行失败的情况下重新执行,默认一直报错就一直重试。

import random
from retrying import retry

@retry
def do_something_unreliable():
    if random.randint(0, 10) > 1:
        print("just have a test")
        raise IOError("raise exception!")
    else:
        return "good job!"

print(do_something_unreliable())

运行这个程序,大家可以看到每次打印“just have a test”这句话的次数都不一样。这是由于我们程序中只要随机整数大于1就会打印并且抛出异常。但是由于我们有装饰器函数 retry,所以在发生异常就会重新再次执行方法,直到随机整数大于1,就会打印“good job!”。

最大重试次数

@retry(stop_max_attempt_number=5)
def do_something_limited():
    print("do something several times")
    raise Exception("raise exception")

do_something_limited()

限制最长重试时间(从执行方法开始计算)

@retry(stop_max_delay=5000)
def do_something_in_time():
    print("do something in time")
    raise Exception("raise exception")

do_something_in_time()

设置固定重试时间

@retry(wait_fixed=2000)
def wait_fixed_time():
    print("wait")
    raise Exception("raise exception")

wait_fixed_time()

设置重试时间的随机范围

@retry(wait_random_min=1000,wait_random_max=2000)
def wait_random_time():
    print("wait")
    raise Exception("raise exception")

wait_random_time()

根据异常重试

def retry_if_io_error(exception):
    return isinstance(exception, IOError)

设置特定异常类型重试

@retry(retry_on_exception=retry_if_io_error)
def retry_special_error():
    print("retry io error")
    raise IOError("raise exception")

retry_special_error()

我们自己定义一个函数,判断异常类型,然后将函数作为参数传给装饰函数 retry ,如果异常类型符合,就会进行重试。

通过返回值判断是否重试

def retry_if_result_none(result):
    """Return True if we should retry (in this case when result is None), False otherwise"""
    # return result is None
    if result =="111":
        return True


@retry(retry_on_result=retry_if_result_none)
def might_return_none():
    print("Retry forever ignoring Exceptions with no wait if return value is None")
    return "111"

might_return_none()

这里我们定义了一个判断返回值的函数,然后将这个函数作为参数传给 retry 装饰函数。当结果返回是“111”时,就会一直重试执行 might_return_none 函数。

标签:exception,retry,raise,Python,重试,retrying,模块,def,wait
From: https://www.cnblogs.com/duoba/p/17302463.html

相关文章

  • 只有一个人说了真话!通解代码——python
    不管几个人说了这话,代码逻辑都是一样的,无非参数不同。例大老鼠发现家里的奶酪少了一大块,审问四只小老鼠ABCD,其实只有一只老鼠偷吃了奶酪。A说:我没吃。B说:是C吃的。C说:肯定是D吃的。D说:C在冤枉我。己知四只小老鼠中有一只说的是真话,三只说的是假话。到底是谁偷吃了......
  • Python 小型项目大全 61~65
    六十一、ROT13密码原文:http://inventwithpython.com/bigbookpython/project61.htmlROT13密码是最简单的加密算法之一,代表“旋转13个空格”密码将字母A到Z表示为数字0到25,加密后的字母距离明文字母13个空格:A变成N,B变成O,以此类推。加密过程和解密过程是一样的,这使得......
  • Python 小型项目大全 71~75
    七十一、声音模拟原文:http://inventwithpython.com/bigbookpython/project71.html类似于西蒙电子玩具,这款识记游戏使用第三方playsound模块,播放四种不同的声音,分别对应键盘上的A、S、D、F键。当你成功地重复游戏给你的图案时,图案会变得越来越长。你的短期记忆中能容纳多少声......
  • Python 小型项目大全 76~81
    七十六、井字棋原文:http://inventwithpython.com/bigbookpython/project76.html井字棋是一种在3×3网格上玩的经典纸笔游戏。玩家轮流放置X或O标记,试图连续获得三个。大多数井字棋都以平局告终,但如果你的对手不小心,你也有可能智胜他们。运行示例当您运行tictactoe.py......
  • Python 小型项目大全 66~70
    六十六、简单替换密码原文:http://inventwithpython.com/bigbookpython/project66.html简单替换密码用一个字母代替另一个字母。由于字母A有26种可能的替换,B有25种可能的替换,C有24种可能的替换,等等,所以可能的键的总数是26×25×24×23×...×1,即403291461126......
  • Python 小型项目大全 31~35
    三十一、猜数字原文:http://inventwithpython.com/bigbookpython/project31.html猜数字是初学者练习基本编程技术的经典游戏。在这个游戏中,电脑会想到一个介于1到100之间的随机数。玩家有10次机会猜出数字。每次猜中后,电脑会告诉玩家它是太高还是太低。运行示例当您运......
  • Python 小型项目大全 36~40
    三十六、沙漏原文:http://inventwithpython.com/bigbookpython/project36.html这个可视化程序有一个粗糙的物理引擎,模拟沙子通过沙漏的小孔落下。沙子堆积在沙漏的下半部分;然后把沙漏翻过来,重复这个过程。运行示例图36-1显示了运行hourglass.py时的输出。:沙漏程序在落......
  • Python 小型项目大全 41~45
    四十一、幸运星原文:http://inventwithpython.com/bigbookpython/project41.html在这个碰运气游戏中,你掷骰子来收集星星。你掷得越多,你能得到的星星就越多,但是如果你得到三个头骨,你就失去了一切!这款快速多人游戏可以支持任意多的玩家,是聚会的理想选择。在你的回合中,你从骰盅......
  • 关于Python爬虫的一些总结
    作为一名资深的爬虫工程师来说,把别人公开的一些合法数据通过爬虫手段实现汇总收集是一件很有成就的事情,其实这只是一种技术。初始爬虫问题:什么是爬虫?网络爬虫是一种按照一定的规则,自动地抓取网络信息的程序或者脚本。爬虫有什么用?①网络数据采集②大数据分析③网页分析......
  • Python 小型项目大全 11~15
    十一、标题党生成器原文:http://inventwithpython.com/bigbookpython/project11.html我们的网站需要欺骗人们去看广告!但是想出有创意的原创内容太难了。幸运的是,有了标题党生成器,我们可以让一台计算机产生数百万个令人发指的虚假标题。都是低质量的,但读者似乎并不介意。这个程......