Python中异常重试的解决方案详解
前言 大家在做数据抓取的时候,经常遇到由于网络问题导致的程序保存,先前只是记录了错误内容,并对错误内容进行后期处理。 原先的流程: 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的重试包,可以用来自动重试一些可能运行失败的程序段。 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() 如果我们运行 retry还可以接受一些参数,这个从源码中Retrying类的初始化函数可以看到可选的参数:
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() 在执行 我们还可以指定要在得到哪些结果的时候去 def retry_if_result_none(result): return result is None @retry(retry_on_result=retry_if_result_none) def get_result(): return None 在执行 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |