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

    文章

    19083

    浏览量

    228739
  • 自动化
    +关注

    关注

    29

    文章

    5467

    浏览量

    78978
  • python
    +关注

    关注

    55

    文章

    4765

    浏览量

    84353

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

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

收藏 人收藏

    评论

    相关推荐

    诚聘高级自动化工程师

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

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

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

    Linux都要会哪些shell技能

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

    步骤实现自动化测试

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

    步骤完成自动化测试

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

    ansible-first-book 自动化工具

    ansible-first-book 自动化工具
    发表于 09-08 09:31 5次下载

    配电自动化实用指标研究

    根据《配电自动化实用化验收细则》中对配电自动化考核要求,重点围绕终端在线率、遥信动作正确率、遥控使用率与遥控成功率四项指标进行考核。目前对配电
    发表于 03-05 14:55 0次下载

    厉害了!山东电力自动化平台正式投

    日前,国网山东省电力集团公司通过了山东信息通信技术监督装备及支撑工具开发实施项目的验收,代表着自动化平台正式投
    发表于 04-30 11:18 4417次阅读

    Ansible企业级自动化探索的详细资料说明

    本文档的主要内容详细介绍的是Ansible企业级自动化探索的详细资料说明主要内容包括了:场景一:自动化
    发表于 06-03 08:00 2次下载
    Ansible企业级<b class='flag-5'>自动化</b><b class='flag-5'>运</b><b class='flag-5'>维</b>探索的详细资料说明

    城域网自动化实现的关键点、难点和解决方案研究

      针对城域网自动化水平较低、人工成本高且无法摆脱重复劳动的现状,本文探讨了当前城域网自动化
    发表于 10-28 09:09 2514次阅读
    城域网<b class='flag-5'>自动化</b><b class='flag-5'>运</b><b class='flag-5'>维</b><b class='flag-5'>实现</b>的关键点、难点和解决方案研究

    城域网是什么,其生命周期和自动化应用有哪些特点

    Labs 摘  要针对城域网自动化水平较低、人工成本高且无法摆脱重复劳动的现状,本文探讨了当前城域网
    的头像 发表于 12-25 14:24 1029次阅读

    使用Python脚本实现自动化任务

    许多运工程师会使用 Python 脚本来自动化任务。Python 是一种流行的编程语言,具有丰富的第三方库和强大的自动化能力,适用于许
    的头像 发表于 04-08 10:36 1606次阅读

    网络设备自动化工具—ansible入门笔记介绍

    Ansible是一款自动化工具,基于Python开发,集合了众多运工具 (Puppet、CFengine、Chef、SaltStack)的优点,
    的头像 发表于 01-15 13:46 1633次阅读
    网络设备<b class='flag-5'>自动化</b><b class='flag-5'>运</b><b class='flag-5'>维</b>工具—ansible入门笔记介绍

    自动化智能维系统在高铁牵引变电所的研究与应用

    智能综合自动化系统的技术,提出针对性的智能解决方案,实现对综合
    的头像 发表于 04-16 16:21 476次阅读
    <b class='flag-5'>自动化</b>智能<b class='flag-5'>运</b>维系统在高铁牵引变电所的研究与应用

    自动化生产车间异常告警管理系统解决方案

    随着科技的进步,智能制造已成为全球制造业的发展趋势。从智能机器人到自动化控制器,各种智能装备纷纷应用于生产流程之中。这种数字转变不仅提高了生产力,还提升了产品质量。但与此同时,也对异常响应和
    的头像 发表于 07-27 10:36 236次阅读
    <b class='flag-5'>自动化</b>生产车间<b class='flag-5'>异常</b>告警<b class='flag-5'>运</b><b class='flag-5'>维</b>管理系统解决方案