1、通过语言特性实现:

  1. for i in range(0,100):
  2. while True:
  3. try:
  4. # do stuff
  5. except SomeSpecificException:
  6. continue
  7. break

 

2、通过第三方库实现:

pip install retry

参数介绍:

  1. def retry(exceptions=Exception, tries=-1, delay=0, max_delay=None, backoff=1, jitter=0, logger=logging_logger):
  2. """Return a retry decorator.
  3.  
  4. :param exceptions: an exception or a tuple of exceptions to catch. default: Exception.
  5. :param tries: the maximum number of attempts. default: -1 (infinite).
  6. :param delay: initial delay between attempts. default: 0.
  7. :param max_delay: the maximum value of delay. default: None (no limit).
  8. :param backoff: multiplier applied to delay between attempts. default: 1 (no backoff).
  9. :param jitter: extra seconds added to delay between attempts. default: 0.
  10. fixed if a number, random if a range tuple (min, max)
  11. :param logger: logger.warning(fmt, error, delay) will be called on failed attempts.
  12. default: retry.logging_logger. if None, logging is disabled.
  13. """

案例:

  1. from retry import retry
  2. @retry()
  3. def make_trouble():
  4. '''Retry until succeed'''
  5. @retry(ZeroDivisionError, tries=3, delay=2)
  6. def make_trouble():
  7. '''Retry on ZeroDivisionError, raise error after 3 attempts, sleep 2 seconds between attempts.'''
  8. @retry((ValueError, TypeError), delay=1, backoff=2)
  9. def make_trouble():
  10. '''Retry on ValueError or TypeError, sleep 1, 2, 4, 8, ... seconds between attempts.'''
  11. @retry((ValueError, TypeError), delay=1, backoff=2, max_delay=4)
  12. def make_trouble():
  13. '''Retry on ValueError or TypeError, sleep 1, 2, 4, 4, ... seconds between attempts.'''
  14. @retry(ValueError, delay=1, jitter=1)
  15. def make_trouble():
  16. '''Retry on ValueError, sleep 1, 2, 3, 4, ... seconds between attempts.'''
  17. # If you enable logging, you can get warnings like 'ValueError, retrying in
  18. # 1 seconds'
  19. if __name__ == '__main__':
  20. import logging
  21. logging.basicConfig()
  22. make_trouble()

  

参考:https://pypi.python.org/pypi/retry

https://stackoverflow.com/questions/2083987/how-to-retry-after-exception-in-python

Python中的retry的更多相关文章

  1. (数据科学学习手札135)tenacity:Python中最强大的错误重试库

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在编写程序尤其是与网络请求相关的程序, ...

  2. python中requests库使用方法详解

    目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...

  3. [转]Python中的str与unicode处理方法

    早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...

  4. python中的Ellipsis

    ...在python中居然是个常量 print(...) # Ellipsis 看别人怎么装逼 https://www.keakon.net/2014/12/05/Python%E8%A3%85%E9 ...

  5. python中的默认参数

    https://eastlakeside.gitbooks.io/interpy-zh/content/Mutation/ 看下面的代码 def add_to(num, target=[]): tar ...

  6. Python中的类、对象、继承

    类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...

  7. python中的TypeError错误解决办法

    新手在学习python时候,会遇到很多的坑,下面来具体说说其中一个. 在使用python编写面向对象的程序时,新手可能遇到TypeError: this constructor takes no ar ...

  8. python中的迭代、生成器等等

    本人对编程语言实在是一窍不通啊...今天看了廖雪峰老师的关于迭代,迭代器,生成器,递归等等,word天,这都什么跟什么啊... 1.关于迭代 如果给定一个list或tuple,我们可以通过for循环来 ...

  9. python2.7高级编程 笔记二(Python中的描述符)

    Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...

随机推荐

  1. 基于Systick系统时钟延时的LED闪烁灯

    1.回顾我们的51 单片机编程,当我们需要做系统延迟的时候,最常采用的一种方式就是使用for 循环的空语句等待来实现. 当然,在STM32 里面也可以这么实现.但是在STM32 的Cortex 内核里 ...

  2. python系统编程(八)

    进程VS线程 功能 进程,能够完成多任务,比如 在一台电脑上能够同时运行多个QQ 线程,能够完成多任务,比如 一个QQ中的多个聊天窗口 定义的不同 进程是系统进行资源分配和调度的一个独立单位. 线程是 ...

  3. curl: (25) Failed FTP upload: 550 解决方案

    ftp的地址一定要以”/”结束.比如:ftp://127.0.0.1/01Dev/

  4. 查看过多占用cpu的是哪部分代码?

    https://www.linuxidc.com/Linux/2016-04/130528.htm (1)top命令可查看是哪个项目占用的cpu内存较大,找到该项目对应的PID (2)top -H - ...

  5. 防止APACHE解析漏洞

    一.PHP端,规范代码,加强尾缀验证 二.Apache端,在httpd.conf中加上如下代码: <Files~"\.(p|P)(h|H)(p|P)."> Deny f ...

  6. 小甲鱼Python第五讲课后习题

    0.Python中,int表示整型 bool:布尔类型 float:浮点型 str:字符串类型 1.为什么布尔类型(bool)的TRUE和FALSE分别用0和1表示? 计算机只认识二进制,由于二进制只 ...

  7. python之继承与派生

    1 继承 继承的概念:继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继承 继 ...

  8. Compile groovy mixed with java in Maven

    Assuming that groovy codes are in src/main/groovy and java codes are in src/main/java. We can use 2 ...

  9. CSS学习之路,指定值,计算值,使用值。

    前面被问过这几个值得区别,没太研究,有点抠文字的感觉,既然到这儿了 ,就简答梳理下吧. 指定值(specified value):通过样式表样式规则定义的值:可以来自层叠样式表,如果没有指定,则考虑父 ...

  10. vim查找格式

    使用了VIM这么久,却一直无法牢记一些基本的操作指令.今天查找一个关键字时,想不起来怎么查找“下一个”,于是google之并解决,顺便把有用的都贴过来罢. 查找指令:/xxx 往下查找?xxx 往上  ...