0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

只需9个步骤,完美实现自动化运维异常处理!

马哥Linux运维 来源:lq 2019-02-04 13:51 次阅读

1异常

异常就是非正常状态,在Python中使用异常对象来表示异常。若程序在编译或运行过程中发生错误,程序的执行过程就会发生改变,抛出异常对象,程序流进入异常处理。如果异常对象没有被处理或捕捉,程序就会执行回溯(Traceback)来终止程序。

2异常类型

通用异常类型表

Exception类:是通用异常基类下列异常类均继承于Exception类,python解析器会自动将通用异常类型名称放在内建命名空间中,所以当使用通用异常类型时,不需要import exceptions模块。

3异常处理

3.1 触发异常raiseraise关键字:手动抛出一个通用的异常类型(Exception),类似Java中的throw语句。raise关键字后跟异常的名称,异常名称能够标识出异常类的对象。执行raise语句时,python会创建指定异常类的对象,还能够指定对异常对象进行初始化的参数,参数也可以为由若干参数组成的元组。注意:一旦执行raise语句,程序就会被终止。格式:raise [exceptionType[,argument][,traceback]]

traceback:这个参数用于追踪异常对象,一般很少使用。这样就可以触发一个异常,并且接收异常信息。3.2 传递异常当你捕获到异常之后又希望再次的触发异常只需要使用不带任何参数的raise关键字。

异常会在捕获之后再次触发同一个异常。3.3 assert语句触发异常assert语句根据后面的表达式的真假来控制程序流。若为True,则往下执行。若为False,则中断程序并调用默认的异常处理器,同时输出指定的提示信息。

例如:

执行结果:

3.4 捕获异常try..except..else注意:except子句的数量没有限制,但使用多个except子句捕获异常时,如果异常类之间具有继承关系,则子类应该写在前面,否则父类将会直接截获子类异常。放在后面的子类异常也就不会执行。格式:

4try的工作原理

执行一个try语句时,python解析器会在当前程序流的上下文中作标记,当出现异常后,程序流能够根据上下文的标记回到标记位,从而避免终止程序。1. 如果try语句执行时发生异常,程序流跳回标记位,并向下匹配执行第一个与该异常匹配的except子句,异常处理完后,程序流就通过整个try语句(除非在处理异常时又引发新的异常)。2. 如果没有找到与异常匹配的except子句(也可以不指定异常类型或指定同样异常类型Exception,来捕获所有异常),异常被递交到上层的try(若有try嵌套时),甚至会逐层向上提交异常给程序(逐层上升直到能找到匹配的except子句。实在没有找到时,将结束程序,并打印缺省的错误信息)。3. 如果在try子句执行时没有发生异常,python将执行else语句后的语句(可选),然后控制流通过整个try语句。

执行结果:

嵌套try:

执行结果:

5捕捉多个异常

方法一:指定一个通用异常,可以捕获多个不同的包含在Exception类中的异常类。

方法二:在一个except子句后将多个异常作为元组元素列出。

方法三:except子句后不带任何异常名称,捕获所有异常

6try..finally语句

无论try语句块中是否触发异常,都会执行finally子句中的语句块,因此一般用于关闭文件或关闭因系统错误而无法正常释放的资源。比如文件关闭,释放锁,把数据库连接返还给连接池等。

注意:try..finally与try..except 是可以同时使用的。

NOTE:try…finally 的意义在于,就是我们在 try 代码块中执行了 return 语句,但是仍然会继续执行在 finally 中的代码块,所以我们一般用作处理资源的释放。

7自定义异常

通过(直接或简介)继承Exception类来创建一个自定义异常类,自定义的异常类只能通过raise关键字来手动触发。

执行结果:

with..as触发异常自动关闭资源在使用类文件的流对象时,都需要单独的调用close()来关闭资源。with..as语句能够实现在with语句块执行完后,自动的关闭文件。如果with语句块中触发异常,会调用默认的异常处理器处理,而且文件仍然能够正常关闭。

执行结果:

8as获取异常信息

每个异常都会有一定的描述信息,可以通过as关键字来获取。但是这种异常信息并不适合一般用户阅读,所以会使用自定义的异常信息。但是仍然会将原有的异常信息保留起来,用于后期的异常分析。

执行结果:

异常参数

也可以使用异常参数作为输出的异常信息参数,来获取异常信息。并且异常参数中包含有异常信息、错误数字、错误位置等属性。

执行结果:

9traceback追踪异常

使用traceback追踪异常的时候,需要import traceback模块。traceback模块可以有效的帮助查看异常的详细信息。注意:若希望获取异常的详细信息,却又不会终止程序的执行,可以在except子句中使用

输出sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file等异常信息,实际上是以线程安全的方式去使用sys.exc_info()函数来获取相同的信息。

执行结果:

异常信息的重定向:如果希望将异常的信息保存在一个指定的文件中,以供后期分析。可以使用下面的方法:

执行结果:

sys.exc_info()获取异常信息

traceback.print_exc()函数实际上是call sys.exc_info()

执行结果:

异常处理用于处理程序错误之外,还有许多应用的地方。如关闭资源、平台兼容、模块导入等。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18269

    浏览量

    222118
  • 自动化
    +关注

    关注

    28

    文章

    5037

    浏览量

    77728
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83465

原文标题:只需9个步骤,完美实现自动化运维异常处理!

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    普及从跑腿到云一体IT管理的常识

    。类似SITEVIEW ITOSS一体IT运营支持系统网管软件与IT管理系统,实现了资产管理、网络设备、服务器与服务器应用监控管理、IT服务管理的标准
    发表于 06-22 14:28

    诚聘高级自动化工程师

    猎头职位:高级自动化工程师【合肥】工作职责: 1、根据基础架构管理需求,规划设计
    发表于 12-12 10:37

    锐捷助互联网数据中心网络自动化、可视

    自动化可视等目的。目前锐捷能够实现基于OpenStack、KVM、Docker等虚拟
    发表于 01-25 09:42

    【深圳】诚聘开发工程师

    猎头推荐职位:开发工程师工作职责:1. 负责平台开发、自动化平台维护、研究维新技术;2
    发表于 07-04 14:34

    为何人员要学Python?

    必须懂开发,不懂开发的维道路会越走越窄。特别是要学会Python开发,Python能满足绝大部分自动化
    发表于 02-02 18:55

    ECS主动2.0,体验升级,事半功倍

    摘要: 阿里云致力于提供更好用的体验,让您使用ECS的过程更透明、高效,并实现更加标准自动化
    发表于 04-20 16:37

    Linux都要会哪些shell技能

    。两者之间,shell几乎是IT企业必须使用的自动化编程语言,特别是在运工作中的服务监控、业务快速部署、服务启动停止、数据备份及处理
    发表于 11-30 17:38

    2019年Linux工程师的高薪出路在哪?

    自动化、平台将这些制度和流程落地执行,提高部门的生产力和人效,员工日常通过平台即可实现观看系统中的监控预警、日志报告、流量预警、安全
    发表于 01-17 14:52

    2019年Linux工程师的高薪出路在哪

    自动化、平台将这些制度和流程落地执行,提高部门的生产力和人效,员工日常通过平台即可实现观看系统中的监控预警、日志报告、流量预警、安全
    发表于 01-28 18:02

    步骤实现自动化测试

    本文介绍自动化测试的 7 步骤:改进自动化测试过程,定义需求,验证概念,支持产品的可测试性,具有可延续性的设计( design for sustainability ),有计划的部署
    发表于 07-18 07:42

    步骤完成自动化测试

    ,关键问题是遵循软件开发的基本规则。本文介绍自动化测试的 7 步骤:改进自动化测试过程,定义需求,验证概念,支持产品的可测试性,具有可延续性的设计( design for susta
    发表于 07-19 06:12

    能云盈和智能助力实现配电智能、精细化

      能云盈和智能就是通过将数据流与业务流相结合的方式助力客户实现配电智能、精细化。智能
    发表于 01-24 13:17

    虚拟故障怎么办?虚拟怎么解决?

    人员的投入。业务健康以最终用户体验和应用响应时间的形式来衡量。如果最终用户不断抱怨应用运行缓慢,那就是一问题。云安的可视窗口,透视虚拟架构,可以让
    发表于 02-21 21:32

    配电自动化系统有哪些功能作用?

    据进行分析处理,以实现用电数据的准确把握、能源消耗的研究和电力市场的供需平衡。  6. 即时报警和通知:如果发生供配电系统异常,配电自动化系统通过给相关人员发送短信、电话等方式即时通知
    发表于 04-10 17:19

    LabVIEW与Tektronix示波器实现电源测试自动化

    MDO MSO DPO2000/3000/4000系列示波器,开发一自动化测试项目。该项目旨在自动化执行一系列电子信号的捕获、分析和报告生成,提高测试过程的效率和准确性。 项目的核心在于
    发表于 12-09 20:37