1、简介网络
retry是一个用于错误处理的模块,功能相似try-except,但更加快捷方便,本文就将简单地介绍一下retry的基本用法。函数
2、基本用法spa
retry:code
做为装饰器进行使用,不传入参数时功能以下例所示:blog
from retry import retry @retry() def demo(): print('错误') raise demo()
咱们编写了每次运行都会经过raise报错的自定义函数demo(),利用默认参数的retry()进行装饰,运行结果以下:io
能够看到,retry()在这里的功能,是在其装饰的函数运行报错后从新运行该函数,在上例中的效果就是反复运行demo(),这也是retry()的基本用法,下面介绍其几个主要参数:class
exceptions:传入指定的错误类型,默认为Exception,即捕获全部类型的错误,也可传入元组形式的多种指定错误类型import
tries:定义捕获错误以后重复运行次数,默认为-1,即为无数次exception
delay:定义每次重复运行之间的停顿时长,单位秒,默认为0,即无停顿程序
backoff:呈指数增加的每次重复运行之间的停顿时长,须要配合delay来使用,譬如delay设置为3,backoff设置为2,则第一次间隔为3*2**0=1秒,第二次3*2**1=2秒,第三次3*2**2=4秒,以此类推,默认为1
max_delay:定义backoff和delay配合下出现的等待时间上限,当delay*backoff**n大于max_delay时,等待间隔固定为该值而再也不增加
下面咱们经过几个直观的例子来更加深入地认识上述参数:
import time from retry import retry '''记录初始时刻''' start_time = time.clock() @retry(delay=1,tries=4,backoff=2) def demo(start_time): '''将当前时刻与初始时刻的时间差(单位:S)做差并四舍五入''' print(round(time.clock()-start_time,0)) raise demo(start_time)
在上例中,咱们设置delay为1,tries为4,backoff为2,经过咱们的自定义函数来记录每次重复运行与初始时刻的时间差,这样第一次与第二次间隔时间为1*2**0=1,第二次与第三次间隔为1*2**1=2,第三次与第四次间隔4,运行结果以下,到达预约的运行情况后程序就会报错从而终止运行:
符合咱们上面的计算结果,下面咱们设置一个较小的max_delay:
import time from retry import retry '''记录初始时刻''' start_time = time.clock() @retry(delay=1,tries=10,backoff=2,max_delay=20) def demo(start_time): '''将当前时刻与初始时刻的时间差(单位:S)做差并四舍五入''' print(round(time.clock()-start_time,0)) raise demo(start_time)
运行结果以下:
能够看到,在delay和backoff共同控制下的间隔时长超过20秒后,以后的每一次间隔时长都固定为20秒,直到全部的tries运行结束。
利用retry,咱们能够在譬如网络爬虫过程当中更加简洁灵活地控制错误处理过程,使得代码具备更好的可读性,以上就是本文的基本内容,若有笔误,望指出。