大家在做数据抓取或者用selenium自动化进行元素定位的时候,经常遇到由于网络问题导致的抓取数据失败,或者定位元素失败。
针对这种情况,我们可以通过设置等待时间去控制,其实还有一种方法,就是使用retrying,它提供一个装饰器函数retry,被装饰的函数会在运行失败的条件下重新执行,默认只要一直报错就会不断重试。
假设我们希望从随机数1~9中得到0,意思是一直随机下去,直到生成随机数0结束。
步骤如下:
1.安装retrying模块 pip install retrying
2.具体代码如下:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#博客:https://blog.csdn.net/sinat_37967865
#文件:retryModel.py
#日期:2018-09-22
#备注:pip install retrying 提供一个装饰器函数retry
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''import random
from retrying import retry@retry #提供一个装饰器函数retry,被装饰的函数就会在运行失败的条件下重新执行,默认只要一直报错就会不断重试。
def getFixRandom():a = random.randint(0, 10)if a > 0:print(a, "不满足要求")raise IOError("如果想要永远走else分支,使用raise IOError()")else:print ("必须返回为0才结束")print(a,"此时满足要求,结束函数")getFixRandom()
3.retrying模块简单介绍
stop_max_attempt_number:用来设定最大的尝试次数,超过该次数就停止重试
stop_max_delay:比如设置成100,那么从被装饰的函数开始执行的时间点开始,到函数成功运行结束或者失败报错中止的时间点,只要这段时间超过0.1秒,函数就不会再执行了
wait_fixed:设置在两次retrying之间的停留时间
wait_random_min和wait_random_max:用随机的方式产生两次retrying之间的停留时间
wait_exponential_multiplier和wait_exponential_max:以指数的形式产生两次retrying之间的停留时间