Python学习之------retry(异常重试)

2023-10-30

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

原先的流程:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python学习之------retry(异常重试) 的相关文章

  • selenium用法详解【从入门到实战】【Python爬虫】【4万字】

    跳转文末 获取实战源码与作者联系方式 共同学习进步 文章目录 简介 selenium安装 安装浏览器驱动 确定浏览器版本 下载驱动 定位页面元素 打开指定页面 id 定位 name 定位 class 定位 tag 定位 xpath 定位 c
  • Python实现超简单【抖音】无水印视频批量下载

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 版权归原作者所有 如有问题请及时联系我们以作处理 作者 python乱炖 PS 如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资
  • sojson jsjiami.com.v6 爬虫js逆向

    sojson jsjiami com v6 爬虫js逆向 地址 aHR0cDovL3d3dy5wYmMuZ292LmNuL3JteWgvMTA1MjA4Lzg1MzIvaW5kZXg1Lmh0bWw 抓取内容 第一次请求 发现返回的不是正确
  • 代理IP的高匿名,匿名和透明的区别

    如果从隐藏使用代理用户的级别上划分 代理可以分为三种 即高度匿名代理 普通匿名代理和透明代理 1 高度匿名代理不改变客户机的请求 这样在服务器看来就像有个真正的客户浏览器在访问它 这时客户的真实IP是隐藏的 服务器端不会认为我们使用了代理
  • [python爬虫] 爬取图片无法打开或已损坏的简单探讨

    本文主要针对python使用urlretrieve或urlopen下载百度 搜狗 googto 谷歌镜像 等图片时 出现 无法打开图片或已损坏 的问题 作者对它进行简单的探讨 同时 作者将进一步帮你巩固selenium自动化操作和urlli
  • 没有50W彩礼,该怎么办

    大家好 我是才哥 刚过完春节 作为到了已婚甚至被催婚年龄的我们也开始讨论一个自古既有的话题 彩礼 今天上午 看到朋友圈刷屏了一个B站UP主的视频 没有50W彩礼 女朋友被强行拖走 我该怎么办 看完视频只想说 https www bilibi
  • sublime text3下搭建Python IDE--Anaconda插件(自动补全)

    今天自己想在sublime text3下装个python自动补全插件 当安装一个包管理器时 Package Contral 时 ctrl shift p输入Install Package时 总是报错说没有这个包 在网上也找了很多解决办法 有
  • 大数据采集概述

    文章目录 大数据采集概述 1 互联网大数据与采集 1 1互联网大数据来源 1 社交媒体 2 社交网络 3 百科知识库 4 新闻网站 5 评论信息 6 位置型信息 1 2 互联网大数据的特征 1 大数据类型和语义更加丰富 2 数据的规范化程度
  • python爬虫第9天 用爬虫测试网站 远程采集

    网站的前端通常并没 有自动化测试 尽管前端才是整个项目中真正与用户零距离接触的唯一一个部分 想象有一个由测试驱动的网络开发项目 每天进行测试以保证网络接口的每个环节的功能 都是正常的 每当有新的特性加入网站 或者一个元素的位置改变时 就执行
  • 面向小白的最全Python可视化教程,超全的

    今天小编总结归纳了若干个常用的可视化图表 并且通过调用plotly matplotlib altair bokeh和seaborn等模块来分别绘制这些常用的可视化图表 最后无论是绘制可视化的代码 还是会指出来的结果都会通过调用streaml
  • 某乎搜索接口x-zse-96参数逆向学习分析,网站:aHR0cHM6Ly93d3cuemhpaHUuY29tLw==

    目标参数 x zse 96 参数分析 全局搜索x zse 96 只有两个地方出行 打上断点后刷新网页 从图中断点地方可以看到 搞清楚u f s 的由来就解决了x zse 96 可以看到s参数是由以下几部分组成 1 101 3 2 0 固定版
  • 利用几行python代码爬取全国疫情数据,全方位地图分析疫情地区分布

    爬取全国疫情数据 所用的网页连接 https api inews qq com newsqa v1 automation foreign country ranklist 可视化用到的模块 gt 戳这里下载 也可以看最后 或私信我 如果没有
  • 【1】python爬虫入门,利用bs4以及requests获取静态网页

    注 本文仅适用于爬虫初级入门者 并不涉及太多技术本质 感谢您阅读此文 最近放假在家 闲时无聊 开始入门了python爬虫 可以完成一些基本的数据爬取 对于一些反爬取例如JS渲染 接口加密等页面仍然处于学习之中 本文就是简单总结最近已熟练掌握
  • Mysql数据库的环境搭建【详细】

    作者简介 大学机械本科 野生程序猿 学过C语言 玩过前端 还鼓捣过嵌入式 设计也会一点点 不过如今痴迷于网络爬虫 因此现深耕Python 数据库 seienium JS逆向 安卓逆向等等 目前为全职爬虫工程师 学习的过程喜欢记录 目前已经写
  • python三位数水仙花数(附零基础学习资料)

    前言 所以直接上代码 python输入一个水仙花数 三位数 输出百位十位个位 从控制台输入一个三位数num 如果是水仙花数就打印num是水仙花数 否则打印num不是水仙花数 任务 1 定义变量num用于存放用户输入的数值 2 定义变量gw
  • python爬虫——爬取快读小说app

    1 爬取结果 csv文件 出现了有两个表头 不明所以 无关大雅 2 使用fiddler4进行抓包 通过观察url 我们不难发现其中的规律 要实现进行分类抓取 需要更改url第一个数字 如下 https sc canrike com Cate
  • Python爬虫

    一 什么是代理 二 代理服务器的作用 可以进行请求的响应和转发 三 在爬虫中为何要使用代理 如果我们使用爬虫对一个网站在一段时间内发起一个高频请求 该网站会检测出这个异常的现象 并将异常的请求 IP 获取 将 IP 加入到黑名单 然后改 I
  • 淘特app x-sign参数签名分析

    之前看见大佬说淘特app的风控比tb的要小很多 于是学习了下t特的签名分析 一 抓包分析 通过Charles抓包分析 分析请求参数 headers x sgext JAWowlF3DRjHdjoiU 2Flc38K43prxmuGa9Jv3
  • 爬虫 跨域请求 获取json数据 解决参数加密

    分析网址 提示 抓取对方信息是通过对方允许的 请不要违法操作 抓取其他个人有关信息 网址先发送了一个OPTIONS请求 Request URL http xxxxxxxx com Request Method OPTIONS Status
  • Python采集猎聘网站招聘数据内容,看看现在职位风向

    嗨喽 大家好呀 这里是爱看美女的茜茜呐 环境使用 Python 3 10 Pycharm 模块使用 第三方模块 需安装 requests gt pip install requests pandas gt pip install panda

随机推荐

  • Building and Installing ACE and Its Auxiliary Libraries and Services

    Synopsis The file explains how to build and install ACE its Network Services test suite and examples on the various OS p
  • Python多线程同时处理多个文件

    前言 在需要对大量文件进行相同的操作时 逐个遍历是非常耗费时间的 这时 我们可以借助于Python的多线程操作来大大提高处理效率 减少处理时间 问题背景 比如说 我们现在需要从一个文件夹下面读取出所有的视频 然后对每个视频进行逐帧处理 由于
  • Geogebra求一道极难的几何题

    第2小题 答案是45 Geogebra文件下载 链接 https caiyun 139 com m i 0E5CKWJDt7wMr 提取码 WSev
  • C++面向对象之对象的初始化和清理

    对象的初始化和清理 生活中我们买的电子产品都会有基本的出厂设置 在某一天我们不用的时候会删除一些自己信息数据保证安全 C 中的面向对象来源于生活 每个对象也都会有初始设置以及对象销毁前的清理数据的设置 构造函数和析构函数 对象的初始化和清理
  • ReenTranReadWriteLock 读写锁 笔记

    参考博客链接 1 https blog csdn net qq 19431333 article details 70568478 2 https blog csdn net yanyan19880509 article details 5
  • aix命令tar包命令应用

    打包并压缩gzip格式 利用ftp传输到远程服务器上 tar cvf ciod appuser gzip qc gt ciod appuser tar gzip ftp v n 192 1 1 48 lt
  • 【技巧】如何在 GitHub 上高效阅读源码?

    在 GitHub 上高效阅读源码的方法有以下几种 方法一 github项目页面 按键盘上的 句号 方法二 github项目页面地址栏github com 改为 github dev 方法三 github项目页面地址栏github com 改
  • 信息学奥赛一本通 1176:谁考了第k名

    题目链接 http ybt ssoier cn 8088 problem show php pid 1176 include
  • Operator ‘+‘ cannot be applied to ‘java.lang.String‘, ‘void‘的解决方法

    刚开始报下图错 是因为我在另一个类中定义有返回值void的方法 如图二 一个想要调用另一个的方法 且是字符串的类型的需要将void换成string 并将输出语句换成return 如图 记得最后一行的分号去掉
  • python循环写入excel中的不同sheet_python实现跨excel的工作表sheet之间的复制方法

    python 将test1的Sheet1通过 跨文件 复制到test2的Sheet2里面 包括谷歌没有能搜出这种问题答案 我们贴出代码 我们加载openpyxl这个包来解决 from openpyxl import load workboo
  • Java项目数据脱敏常用技术及Jasypt实战

    数据脱敏在Java项目中是一项非常重要的任务 它可以保护敏感数据 同时符合法规和隐私保护要求 在本篇博客中 我们将介绍数据脱敏的概念以及在Java项目中常用的开源框架和工具的实战应用 什么是数据脱敏 数据脱敏是指将敏感数据进行处理 使其在保
  • styled-components的配置和使用

    在react中 正常的给组件引入css文件 该css文件会直接作用于全局 使用styled components可以有效控制好css作用域 1 安装 yarn add styled components 2 配置并设置全局样式 新建一个js
  • Java实现CNN

    Java实现CNN 算法介绍 CNN的优势 卷积操作 池化操作 网络结构 训练过程 前向传播 反向传播 代码实现 数据模型类Dataset 矩阵尺寸类Size 核心操作类MathUtils Operator OperatorOnTwo接口下
  • 零基础学习Vue: 第21课 Vue 单向数据流父组件的属性值子组件如何更改:

    零基础学习Vue 第21课 Vue定义子组件template的常见3种写法 单向数据流原理 子组件不能直接修改父组件中传递的数据 如需间接改变父组件传递的数据 解决方法 可以在子组件data选项中存储父组件传递的数据之后修改子组件中的数据
  • 解决httpServletRequest.getParameter获取不到参数

    用httpServletRequest getParameter接收post请求参数 发送端content Type必须设置为application x www form urlencoded 否则会接收不到 RequestMapping
  • go语言各种hash哈希算法使用汇总(超详细代码)

    目录 前言 一 首先以md4为例 一 16进制字符串的md4 二 字符串的md4 三 16进制字符串 字符串封装 二 md4 md5 sha1 ripemd160 sha256 sha512 一 导包 二 单个使用 三 md4 md5 sh
  • 使用jsoup选择器来查找元素

    一 用途 使用jsoup解析网页 抓取手机型号和系统信息 二 获取方式 例子 获取终端制造商链接列表 return public List
  • 话题作文汇总

    一 前言 在备考的过程中 研读和学习了多篇英语话题作文 在此将其记录下来 以便加深印象 二 作文列表 Public Role Model s Rights Internet Kills Conversation Generation Gap
  • form表单的对象

    这个是关于表单 表单在HTML中是很重要的一个部分 关于表单的使用 里面的属性和方法不算很多 这里就介绍一下表单的信息 用法 document forms 是一个数组 包含了文档中所有的表单
  • Python学习之------retry(异常重试)

    在做数据抓取的时候 经常遇到由于网络问题导致的程序保存 先前只是记录了错误内容 并对错误内容进行后期处理 原先的流程 def crawl page url pass def log error url pass url try crawl