范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Python异常还能写得如此优雅

  作者:闲欢
  来源:Python 技术
  在写程序时,我们会经常碰到程序出现异常,这时候我们就不得不处理这些异常,以保证程序的健壮性。
  处理异常的版本有以下几种,你通常的做法是哪种?
  不负责任版本
  这种情况下,不作任何处理,任由程序报错,从而导致程序中断。
  针对简单的程序,这样做没什么问题,大不了我遇到问题之后把问题解决,然后重新运行。但是如果是复杂的系统就会很麻烦了,可能你一个异常阻塞了系统的运行,带来灾难性的后果。 简单处理版本
  简单处理版本,就是加上异常捕获,在发生异常时记录日志,时候可以通过日志来定位异常。 def do_something():     pass def log_error(xxx):     pass  try:    do_something() except:     log_error(xxxx)  改进处理版本
  对于简单处理版本做了改进,增加重试次数。这个在爬虫程序中比较常见,第一次请求超时,可能过一会再请求就成功了,所以重试几次可能会消除异常。 attempts = 0 success = False while attempts < 3 and not success:     try:         do_something()         success = True     except:         attempts += 1         if attempts == 3:             break
  但是这样做仍然不够优雅,你可能要在很多地方去写这种重试的硬编码,程序看起来乱糟糟的。
  今天就给大家介绍一个第三方模块 —— retrying。它是对程序中异常重试的一种优雅的解决方案。 安装与使用安装
  安装命令还是那么平淡无奇:
  pip install retrying 使用
  下面给大家介绍一下这个装饰函数有哪些可以使用的参数。生命不息,奋斗不止
  retrying 提供一个装饰器函数 retry,被装饰的函数会在运行失败的情况下重新执行,默认一直报错就一直重试。import random from retrying import retry  @retry def do_something_unreliable():     if random.randint(0, 10) > 1:         print("just have a test")         raise IOError("raise exception!")     else:         return "good job!"  print(do_something_unreliable())
  运行这个程序,大家可以看到每次打印"just have a test"这句话的次数都不一样。这是由于我们程序中只要随机整数大于1就会打印并且抛出异常。但是由于我们有装饰器函数 retry,所以在发生异常就会重新再次执行方法,直到随机整数大于1,就会打印"good job!"。做人不能太固执
  这种无休止地重试,简直是浪费生命,浪费资源。我们要建设绿色家园,所以不妨加点限制:# 最大重试次数 @retry(stop_max_attempt_number=5) def do_something_limited():     print("do something several times")     raise Exception("raise exception")  do_something_limited()  珍惜有限的时间
  一寸光阴一寸金,寸金难买寸光阴。我们要珍惜有限的时间,所以不妨给我们的重试加个时间限制:# 限制最长重试时间(从执行方法开始计算) @retry(stop_max_delay=5000) def do_something_in_time():     print("do something in time")     raise Exception("raise exception")  do_something_in_time()  驻足欣赏路上风景
  人生匆匆数十载,不要一路狂奔而忘记欣赏路边的美景,有时候我们需要花点时间来欣赏一路的美景:# 设置固定重试时间 @retry(wait_fixed=2000) def wait_fixed_time():     print("wait")     raise Exception("raise exception")  wait_fixed_time()  给失败设个限
  虽说我们需要屡败屡战的韧性,但是失败也要有个限度,不能在失败中度过一生:# 设置重试时间的随机范围 @retry(wait_random_min=1000,wait_random_max=2000) def wait_random_time():     print("wait")     raise Exception("raise exception")  wait_random_time()  有些人值得等待
  茫茫人海中,我就是要等到那个对的人:# 根据异常重试 def retry_if_io_error(exception):     return isinstance(exception, IOError)  # 设置特定异常类型重试 @retry(retry_on_exception=retry_if_io_error) def retry_special_error():     print("retry io error")     raise IOError("raise exception")  retry_special_error()
  我们自己定义一个函数,判断异常类型,然后将函数作为参数传给装饰函数 retry ,如果异常类型符合,就会进行重试。有些结果是我们希望见到的
  人生并不是一帆风顺,有些时候我们会遇到挫折,这些挫折也许在一开始就是我们想要的:# 通过返回值判断是否重试 def retry_if_result_none(result):     """Return True if we should retry (in this case when result is None), False otherwise"""     # return result is None     if result =="111":         return True   @retry(retry_on_result=retry_if_result_none) def might_return_none():     print("Retry forever ignoring Exceptions with no wait if return value is None")     return "111"  might_return_none()
  这里我们定义了一个判断返回值的函数,然后将这个函数作为参数传给 retry 装饰函数。当结果返回是"111"时,就会一直重试执行 might_return_none  函数。生活丰富多彩,并不单调
  我们的生活是丰富多彩的,从来都没有很单调。所以上面这些参数,我们可以随意组合使用,并不限定每次只能用一个。比如你可以限定遇到 IOError  时进行重试,并且重试次数最多5次。总结
  人生不可重来,但是Python可以重试!
  我已经将retrying  这个装饰函数的使用方法毫无保留地奉献给各位看官了,赶快用起来吧!

智商税?同样是骁龙778G,一个卖1399元很超值,另一个却卖4088元如果说手机的核心配置,应该要属决定手机性能的处理器芯片了,在科技飞速发展的今天,手机的配置与处理器的换代升级也越来越频繁,手机芯片的种类也越来越多。可以这样说,芯片与处理器已经慢慢vivoXFold首款折叠旗舰航天级铰链4月11日发布近日,vivo官方发文称,vivo首款折叠旗舰vivoXFold将于4月11日新品发布会揭晓。(图片源自网络)据vivo官方表示,该vivoXFold是一款大,集大成的专业折叠旗舰今年50岁了,找不到合适的工作,买辆卡罗拉跑滴滴,划的来吗?关键是买车跑不了滴滴呀,首先,滴滴司机端已经下载不了其次,买车没有运营证属于非法营运,运管查车,逮住了至少罚款一万。现在千万不要入坑,我老公2020年买的卡罗拉,车贷还有3个月还完iOS15。4更新啦!期待已久的戴口罩解锁来了,App支持120HZ刷新了IOS更新啦!IT之家3月15日消息,苹果今日凌晨发布了iOSiPadOS15。4正式版更新。支持iPhone12及后续机型。iOS15。4带来了大家期待已久的戴口罩FaceID解8128GB12128GB12256GB该选哪种?行内人告诉你正确答案现在的手机配置越来越丰富,可以满足不同人的需求,不过配置多了后,使得一些人在购买手机的时候无从下手,不知道该选择哪个版本的好,比如目前的手机存储主要包括8128GB12128GB1中国果粉投诉就不是投诉?库克对荷兰韩国妥协,看人下菜?在过去的文章中讲到,中国市场的崛起绝非偶然,中国消费者对消费观的改变也绝非偶然。这个过程不仅国民要适应,就连外企海外品牌都需要去适应,否则就会被淘汰。但客观来说,西方资本财团短时间光刻机或不再是瓶颈?芯片出现新技术路线,荷兰ASML应该意识到了不由得,一声叹息记得至少在10nm制程工艺时期,就畅想硅基材料的半导体芯片,一旦达到5nm制程工艺物理极限,又该如何去应对量子隧穿效应?现如今,搭载到iPhone等智能手机的5nm烂大街的三款手机,其中有你在用的吗?你看到现在最烂大街的三款手机是哪三款呢?接下来就说说在我看来现在最烂大街的三款手机。烂大街一词听起来像是贬义词,但在我看来却是褒义词,毕竟你说一个东西既然可以被人买到烂大街,那说明目前最值得买的三款手机,堪称三大系统代表之作,你更喜欢哪款?目前而言,手机系统的三大代表可以苹果的IOS系统华为的鸿蒙系统以及安卓系统。如果喜欢用这三种不同系统的用户,该怎样选择手机呢?iPhone13ProiPhone13Pro电池容量从造镍啊!特斯拉官宣全球市场涨价国产Model3Y售价上调1万元10日消息,美国电动汽车制造商特斯拉提高了在美国销售的ModelY和Model3的价格,各州普涨1,000美元。中国市场的同款车型价格也上调了1万元。特斯拉去年将Model3和Mo菜鸟面向全球毕业生启动春招将开放八类岗位大众网海报新闻记者孙杰济南报道日前,菜鸟物流启动了最新校园招聘,面向海内外高校应届毕业生开放8大类职位。这些岗位分布在全国50多个城市,其中超过8成岗位是招聘物流运营人员。符合条件
上海迪士尼33863人核酸均为阴性,隔离24小时后将再次检测关于上海迪士尼的疫情,目前引起多方的重视,对此相关部门在第一时间进行了检测和排查。目前,上海市新冠肺炎疫情防控工作领导小组办公室发布消息称根据外省市协查通报,本市对2021年10月5G手机才是明智之选Mate30系列5G版一步到位的感觉真香在今年的iPhone11系列新机发布之后,笔者身边不少朋友入手了苹果的新机,但这一次的苹果新机似乎并没有让朋友们感到惊喜,从他们的使用体验来看,iPhone11系列新机不仅没有5G小米最火夜间神器!5万功率,续航240天,解决90家庭的睡眠问题大家应该都知道小米有一个旗舰精品店小米有品吧,虽然说小米有品上的产品并非都是小米自己生产制造的,但它上架的产品大多都是集质量功能颜值价格于一身,在同价格内性价比超高。作为一个忠实的小米众筹上架职场续命神器14个按摩头,仅499元!白领值现在上班族都是电脑办公,每天对着电脑长达七八个小时,甚至是十几个小时,对眼睛的伤害非常大,时常会觉得眼睛疲劳酸疼,加上又不太注重对眼睛的保护,导致眼部压力很大。想买个眼仪,但动不动ToB品牌应如何制定营销策略,关键点在何处?ToB品牌就是,面向行业或者面向商家的商业品牌,比如1688提供商业端的批发与工厂订单,而天猫淘宝则直接面向消费者。前者是ToB,后者是ToC。通常来说,这里更多需要销售人员,而非又准备甩锅了!美高官称看起来中国人对美国骚乱感到满意和安慰大家都知道,最近一段时间以来,特别是心冠状病毒疫情爆发以来,美国的政客们疫情防疫做得不怎么样,甩锅的本事却不断见长,美国国内的确诊人数和死亡人数不断增加,美国一些高官没有拿出什么有vivoS10系列绮光焕彩后壳做画布,光影交织演绎动人画面vivoS系列一直走在潮流美学探索的前沿,以时尚的外观和强大的自拍能力吸引着年轻用户群体,不断满足年轻人对美的独特追求。历代产品都为用户献上了独特的色彩之美。近日发售的vivoS1Redminote10系列,再次重新定义千元机的标准,究竟体验如何?小米与5月26日正式地发布了属于他们的Redminote10系列,其配置再一次震撼了整个手机界,其豪华的配置在去年甚至于今年前半年中属于某些厂商的旗舰机或次旗舰级的配置,可谓是豪华iPhone13即将发布却惨遭截胡,荣耀Magic3系列升级影像精准狙击随着苹果秋季发布会的临近,数码圈的关注焦点也集中到了iPhone13系列身上,不过现阶段的高端市场中,苹果的声量正遭受国产品牌的冲击。就前段时间问世的荣耀Magic3系列来说,它凭有专家称,穷人之所以穷是因为懒惰不够努力,你认同这个说法吗?大家都知道,在任何一个国家,都有穷人和富人,而富人占少数,穷人则是占了大多数。很多富人之所以富有,都是因创业成功,结果获得了巨大的财富,而且还成为受人敬仰的创业英雄,像马云马化腾刘我国存款为何断崖式下跌?专家消费观念变了,大家会享受了过去几十年来,我国很多人都有存钱的习惯,发了工资,除了生活费和日常开支,把剩余的钱都存到银行里,一来可以攒下钱,二来还能涨利息。过去连续多年,我国的居民存款都是世界第一,不论是人均