我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python学习之------retry

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python学习之------retry

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

原先的流程:

def crawl_page(url):
    pass

def log_error(url):
    pass

url = ""
try:
   crawl_page(url)
except:
    log_error(url)

改进后的流程:

attempts = 0
success = False
while attempts < 3 and not success:
    try:
        crawl_page(url)
        success = True
    except:
        attempts += 1
        if 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类的初始化函数可以看到可选的参数:

1、stop_max_attempt_number:用来设定最大的尝试次数,超过该次数就停止重试
2、stop_max_delay:比如设置成10000,那么从被装饰的函数开始执行的时间点开始,到函数成功运行结束或者失败报错中止的时间点,只要这段时间超过10秒,函数就不会再执行了
3、wait_fixed:设置在两次retrying之间的停留时间
4、wait_random_minwait_random_max:用随机的方式产生两次retrying之间的停留时间
5、wait_exponential_multiplierwait_exponential_max:以指数的形式产生两次retrying之间的停留时间,产生的值为2^previous_attempt_number * wait_exponential_multiplier,previous_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函数中,如果exception是IOError那么就进行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,否则就结束并返回函数值。

其他相关资料:
https://pypi.python.org/pypi/retry/
https://julien.danjou.info/blog/2015/python-retrying
https://github.com/rholder/retrying

原文:https://www.biaodianfu.com/python-error-retry.html

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python学习之------retry

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python学习之------retry

在做数据抓取的时候,经常遇到由于网络问题导致的程序保存,先前只是记录了错误内容,并对错误内容进行后期处理。原先的流程:def crawl_page(url): passdef log_error(url): passurl =
2023-01-31

python学习之--习题集

1.什么是PVM?pvm是python的虚拟机,它是python运行时引擎解释编译得到的代码
2023-01-31

python之syslog学习

Normal07.8 磅02falsefalsefalseEN-USZH-CNX-NONE table.MsoNormalTable{mso-style-name:普通表格;mso-tstyle
2023-01-31

python学习之pandas

#Pandas'''1,Pandas是Python的一个数据分析报包,该工具为解决数据分析任务而创建。2,Pandas纳入大量库和标准数据模型,提供搞笑的操作数据集所需的工具3.pandas提供大量能使我们快速便捷地处理数据的1函数方法4,
2023-01-31

python学习之道

2018/3/16开始学习python这门语言的第一天,我的职业是网络工程师,数通无线安全方向,因为对技术比较喜欢,所以在工作之余会学习一些高端的技术,比如:虚拟化,存储之类的,现在网络工程师已经越来越多了,而且传统技术是过不了多少年的,所
2023-01-31

Python 学习之路 - Python

一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
Python 学习之路 - Python
2023-01-31

python 学习之 PythonAdv

#!/usr/bin/python#coding=utf-8#词典'''nl = [1, 3, 8]nl.append(15)print nlbl = [2, 3, 5]print nl + bldic = {'tom': 11, 'sam
2023-01-31

Python学习之property

Python中使用Property函数可以将类中的函数当作属性来调用。案例 1 __metaclass__=type 2 class Rectangle: 3 def __init__(self): 4 self.w
2023-01-30

python学习之---mutable

python的数据类型分为mutable(可变) 和 immutable (不可变)mutable : list ,dictinmutable : int , string , float ,tuple...mutable和immutabl
2023-01-31

python学习之路

第一部分    使用入门1、人们选择python的六个主要原因是什么?①软件质量、开发者的效率、程序的可移植性、标准库的支持、组件集成和享受简便,其中质量和效率是选择python的主要原因。2、请列举正在使用python的四个著名公司的名字
2023-01-31

Python学习之类

前言:之前写的博客,都是借鉴别的博文或者是环境的配置,没有自己的东西,掌握的很少。以后的博文,我都会尽力加上一些自己的东西。现在开始进入我的python世界吧!为什么要有类:在面向对象编程中,你要通过类来创建对象。通过类你可以对对象进行定义
2023-01-31

Python学习之List

**Python的列表可以存儲任何數據類型,包括列表本身。它是通過索引訪問。**Python的索引值是從0開始的,以些類推**Python是通過中括號來包含所有的值,值與值之間通過","號分隔**查看python列表的擁有哪些方法,可以通過
2023-01-31

python学习之matplot

import matplotlib.pyplot as pltimport numpy as npimport pandas as pdfrom mpl_toolkits.mplot3d import Axes3Dimport matp
2023-01-31

Python学习之初识Python

Python作为一种面向对象,解释型的程序语言。拥有简洁(通过缩进来区别不同的语句块),丰富强大的库。可以将多个模块导入使用的特性又被称之为脱水语言。Django可作为Python的Web开发框架语句块:   Python通过相同的缩进来确
2023-01-31

python学习之路—day1

变量:存储信息,日后被调用、修改操作.常量:固定不变的量,字母大小写。命名规则:1,、字母数字下划线组成2、命名具有代表意义的3、不能以数字开头,特殊符号开头4、不能以保留字命名,lg:for等5、命名一般不以中文命名6、命名一般以驼峰体形
2023-01-30

python学习之元组

在python中,元组使用小括号,小括号的元素使用逗号隔开即可;1.元组和列表的区别元组和列表的相同点就是都是序列类型的容器对象,可以存放任何类型的数据,支持切片,迭代操作等;元组和列表的不同点是元组是不可变类型,大小固定,而列表是可变类型
2023-01-31

python的学习之旅

首先先介绍下本人,本人名叫杜邱,别名也叫故都的秋,网络工程专业毕业,现就职一家电子商务公司,已经三年了,起初从一个小小的网管做起,一台路由器,一台交换机,下面连着50几台电脑,三年过去了,慢慢的也在成长,装过监控,管过服务器,弄过网络,杀过
2023-01-31

python之_requests库学习_

一、超时 可以告诉 requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。 连接超时指的是在你的客户端实现到远端机器端口的连接时Request 会等待的秒数。一个很好的实践方法是把连接超时设为比 3 的倍数略大的一
2023-01-30

Python学习之初识

第一章1.1 typora 的安装与使用1.1.1 标题的创建:方法一:用 ###+空格 表示标题,几个#就是几级标题方法二:菜单栏——》段落——》选择标题1.1.2 有序列表与无序列表菜单栏——》段落——》可以选择有序列表or无序列表or
2023-01-31

python学习之GUI(pygame)

画一个圆形FFFFFF是白色,000000是黑色import pygamepygame.init()windowSize=[400,300]screen=pygame.display.set_mode(windowSize)pygame.d
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录