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

本文详细介绍了Python中的异常处理机制,包括try-except-else-finally语句的使用,异常的触发与捕获,以及如何通过raise关键字传递和自定义异常。此外,还讲解了assert语句的作用,with语句的自动资源管理,以及如何利用traceback模块获取和处理异常信息。通过这些内容,读者可以深入理解Python中的错误处理和程序健壮性设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1异常

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

2异常类型

通用异常类型表

4604eaf75acc76f360d9f263f5a55586.png

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

3异常处理

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

88228209b6c27b2683a3799f17133c81.png

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

3fa10bb0e7edb1c7a88c59e148b0a25d.png

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

2734fdb1e3472c536ba6c11058ba48e1.png

例如:

04bec521742d0b6755f21bb8ba966872.png

执行结果:

74d3a1c05293eb7408a5f26dd68a3ad9.png

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

5108b55179d122840664b01471b62c22.png

4try的工作原理

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

428a33b9e0b2fe53c027ee78b8797234.png

执行结果:

571fda54681da43dadf745cfed1651fd.png

嵌套try:

43c14912c3e861eb5ef875ca843b887d.png

执行结果:

de679bbd543ac0bf0fff8462996484ee.png

5捕捉多个异常

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

9fed1da0be857cd89f8f8f6c6c7c8f97.png

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

dcea58282bfee3e02fc308ba0b540d08.png

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

ce031672fc7efe1516a52bf6e3f3778b.png

6try..finally语句

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

26780d2a1f561ad61c59f9b4511f4d09.png

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

6be00f385689b9301da2944b5731b103.png

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

7自定义异常

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

173db34e98aa479e607cdbd88d4fb88d.png

执行结果:

636308f4f94587c1674f0f00b18820e4.png

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

1cf5ef090606d84b2b5028395ba7d446.png

执行结果:

26595b8605e47ba00315ad1158caa1d7.png

8as获取异常信息

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

848ea4a97eca70fc129f335e3e2c4705.png

执行结果:

490e0f6b058969ed02776110f1dc0751.png

异常参数

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

9aa13d2779458163473df5a2a367565c.png

执行结果:

4f56983ceaa18a805a5a18cd5fb20e4f.png

9traceback追踪异常

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

c0ef39c9d4b8a7abb87acc0fcfff7f62.png

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

97d81f6a591fe936e2ef37d8792631a7.png

执行结果:

213eb13c7fee1b9f2075c3ebc3e3584f.png

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

e56da26b7ee6e88e477094066d205fd9.png

执行结果:

84f8102f8fe04152a2fd871dac5fa26d.png

sys.exc_info()获取异常信息

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

48f49be6110f1a83b4f12181f0349b46.png

执行结果:

c2c7aef353c3d467d66b6b5ccc835117.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值