想了解Python中异常重试的解决方案详解的相关内容吗,标点符在本文为您仔细讲解Python异常重试解决方案的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:python,重试,python,重试机制,python,出错重试,下面大家一起来学习吧。

前言

大家在做数据抓取的时候,经常遇到由于网络问题导致的程序保存,先前只是记录了错误内容,并对错误内容进行后期处理。

原先的流程:


def crawl_page(url):passdef log_error(url):passurl = ""
try:crawl_page(url)
except:log_error(url)

改进后的流程:


attempts = 0
success = False
while attempts < 3 and not success:try:crawl_page(url)success = Trueexcept:attempts += 1if attempts == 3:break

最近发现的新的解决方案:retrying

retrying是一个 Python的重试包,可以用来自动重试一些可能运行失败的程序段。retrying提供一个装饰器函数retry,被装饰的函数就会在运行失败的条件下重新执行,默认只要一直报错就会不断重试。


import random
from retrying import retry@retry
def do_something_unreliable():if random.randint(0, 10) > 1:raise IOError("Broken sauce, everything is hosed!!!111one")else:return "Awesome sauce!"print do_something_unreliable()

如果我们运行have_a_try函数,那么直到random.randint返回5,它才会执行结束,否则会一直重新执行。

retry还可以接受一些参数,这个从源码中Retrying类的初始化函数可以看到可选的参数:

  • stop_max_attempt_number:用来设定最大的尝试次数,超过该次数就停止重试
  • stop_max_delay:比如设置成10000,那么从被装饰的函数开始执行的时间点开始,到函数成功运行结束或者失败报错中止的时间点,只要这段时间超过10秒,函数就不会再执行了
  • wait_fixed:设置在两次retrying之间的停留时间
  • wait_random_min和wait_random_max:用随机的方式产生两次retrying之间的停留时间
  • wait_exponential_multiplier和wait_exponential_max:以指数的形式产生两次retrying之间的停留时间,产生的值为2^previous_attempt_number * wait_exponential_multiplierprevious_attempt_number是前面已经retry的次数,如果产生的这个值超过了wait_exponential_max的大小,那么之后两个retrying之间的停留值都为wait_exponential_max。这个设计迎合了exponential backoff算法,可以减轻阻塞的情况。
  • 我们可以指定要在出现哪些异常的时候再去retry,这个要用retry_on_exception传入一个函数对象:

def retry_if_io_error(exception):return isinstance(exception, IOError)@retry(retry_on_exception=retry_if_io_error)
def read_a_file():with open("file", "r") as f:return f.read()

在执行read_a_file函数的过程中,如果报出异常,那么这个异常会以形参exception传入retry_if_io_error函数中,如果exceptionIOError那么就进行retry,如果不是就停止运行并抛出异常。

我们还可以指定要在得到哪些结果的时候去retry,这个要用retry_on_result传入一个函数对象:


def retry_if_result_none(result):return result is None@retry(retry_on_result=retry_if_result_none)
def get_result():return None

在执行get_result成功后,会将函数的返回值通过形参result的形式传入retry_if_result_none函数中,如果返回值是None那么就进行retry,否则就结束并返回函数值。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

Python异常重试解决方案 Python中异常重试的解决方案详解相关推荐

  1. python迭代器创建序列_Python 中迭代器与生成器实例详解

    Python 中迭代器与生成器实例详解 本文通过针对不同应用场景及其解决方案的方式,总结了Python中迭代器与生成器的一些相关知识,具体如下: 1.手动遍历迭代器 应用场景:想遍历一个可迭代对象中的 ...

  2. python getopt_python 5种 statsPython中的getopt函数使用详解

    函数原型: getopt.getopt(args, shortopts, longopts=[]) 参数解释: args:args为需要解析的参数列表.一般使用sys.argv[1:],这样可以过滤掉 ...

  3. python获取键盘按键_Python中捕获键盘的方式详解

    python中捕获键盘操作一共有两种方法 第一种方法: 使用pygame中event方法 使用方式如下:使用键盘右键为例 if event.type = pygame.KEYDOWN and even ...

  4. python decimal类型转化_python中的decimal类型转换实例详解

    [Python标准库]decimal--定点数和浮点数的数学运算 作用:使用定点数和浮点数的小数运算. Python 版本:2.4 及以后版本 decimal 模块实现了定点和浮点算术运算符,使用的是 ...

  5. python的count函数_python中count函数的用法详解

    python中count函数的用法 count()函数 描述:统计字符串里某个字符出现的次数,可以选择字符串索引的起始位置和结束位置. 语法:str.count("char", s ...

  6. python编程顺序_Python编程中归并排序算法的实现步骤详解

    基本思想:归并排序是一种典型的分治思想,把一个无序列表一分为二,对每个子序列再一分为二,继续下去,直到无法再进行划分为止.然后,就开始合并的过程,对每个子序列和另外一个子序列的元素进行比较,依次把小元 ...

  7. python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解

    我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pa ...

  8. python编程字典100例_python中字典(Dictionary)用法实例详解

    本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映射结构的数据类型,由无序的"键-值对"组成. ...

  9. Python中的select、epoll详解

    Python中的select.epoll详解 文章目录 Python中的select.epoll详解 一.select 1.相关概念 2.select的特性 1.那么单进程是如何实现多并发的呢??? ...

  10. python中为什么推荐使用with_Python中的with关键字使用详解

    这篇文章主要介绍了Python 中的with关键字使用详解的相关资料,在Python中,with关键字是一个替你管理实现上下文协议对象的好东西,需要的朋友可以参考下 "> 在 Pyth ...

最新文章

  1. hadoop作业初始化过程详解(源码分析第三篇)
  2. Gzip 服务端压缩数据
  3. 【OpenCV】5种图像滤波辨析:方框、均值、高斯、中值、双边
  4. EF获取多个数据集以及MySQL分页数据查询优化
  5. 多分支集成发布各种坑怎么填?
  6. mysql ssd优化_mysql ssd 优化
  7. 编译异常例子java_Java中异常发生时代码执行流程
  8. 基于SSM实现的旅游管理系统【附源码】(毕设)
  9. 教你查看预装Win8电脑内置系统激活密钥(Win8 OEM Key)
  10. R语言plotly可视化:使用plotly可视化模型预测概率值的直方图、使用分类标签为阴性和阳性样本预测概率直方图进行颜色区分(prediction probability histogram)
  11. 解决win10小娜无法搜索本地应用程序
  12. 运单状态机设计及全流程异常跟踪整体架构
  13. 电机控制基础知识储备
  14. 求π的值C++--递归求阶乘、浮点数精度控制技巧
  15. Apache Ignite详解
  16. 字符串--Leetcode (python)
  17. jquery事件代理
  18. C++实现Python变量
  19. 我们都需要时间,成为更好的人(转载)
  20. TypeScript 使用手册

热门文章

  1. 计算机中磁盘与硬盘的区别,电脑内存和硬盘的区别
  2. Pro/ENGINEER常见应用问题解答
  3. php 动态创建表格
  4. ubuntu18.04 安装 Kurento
  5. 手把手教你怎么用tcgames直播玩刺激战场和全军出击吃鸡手游
  6. 如何定义研发 KPI:以团队速度为标准
  7. 航空航天制造领域工业机器人发展趋势
  8. ssh服务器拒绝了密码
  9. 中小学计算机能力者提升培训合格,关于参加全省中小学教师信息技术应用能力提升工程2.0培训管理者高级研修班的通知...
  10. lesson7 纸飞机直方图