2020-12-15

本文详细介绍了Python中的异常概念,包括异常的自动回溯和处理。讲解了Python的异常类,如try-except语句、as关键字获取异常信息、处理多种异常、try-except-else和try-finally语句的使用。此外,还提到了如何手动触发异常,如raise语句和assert语句。最后,讨论了自定义异常和异常回溯的信息,强调了在程序调试和错误处理中的重要性。
摘要由CSDN通过智能技术生成

异常:
一.异常概念:是指因为程序出错而在正常控制流以外采取的行为,即异常是一个事件,该事件可能会在程序执行过程中发生并影响程序的正常执行。
1.在Python程序中,如果出现异常,而异常对象并未被捕获或处理,程序就会用自动回溯,返回一种错误信息,并终止执行。2.在程序中,当Python检测到一个错误时,解释器就会指出当前流程已无法继续执行下去,这时就出现了异常。
二.异常类:
ython为了区分不同的异常,其中内置了许多异常类,常见的异常类如表所示。
在这里插入图片描述
在这里插入图片描述
三.捕获与处理异常:
1.try-except语句:可以捕获异常并进行处理。
在这里插入图片描述
在程序中,虽然开发者可以编写处理多种异常的代码,但异常是防不胜防的,很有可能再出现其他异常,此时就需要捕获并处理所有可能发生的异常,其语法格式如下:
在这里插入图片描述
2.使用as获取异常信息:
为了区分不同的异常,可以使用as关键字来获取异常信息,其语法格式如下:
在这里插入图片描述
如果程序需要获取多种异常信息,则可以使用如下语法格式:
在这里插入图片描述
如果程序需要获取所有异常信息,则可以使用如下语法格式:
在这里插入图片描述
所有的异常类都继承自BaseException类,因此上述语句可以获取所有异常信息。
3.try-except-else语句:
try-except-else语句用于处理未捕获到异常的情形,其语法格式如下:
在这里插入图片描述
如果try语句内出现了异常,则执行except语句块,否则执行else语句块。
4.try-finally语句:
在try-finally语句中,无论try语句块中是否发生异常,finally语句块中的代码都会执行,其语法格式如下:
在这里插入图片描述
其中,finally语句块用于清理在try块中执行的操作,如释放其占有的资源(如文件对象、数据库连接、图形句柄等)。
另外,with-as语句可作为try-finally语句处理异常的替代,其语法格式如下:
在这里插入图片描述
程序先执行try语句块,若try语句块中的某一语句执行时发生异常,则程序跳转到except语句,从上到下判断抛出的异常是否与except后面的异常类相匹配,并执行第一个匹配该异常的except后面的语句块。
若try语句块中发生了异常,但是没有找到匹配的异常类,则执行不带任何匹配类型的except语句块。
若没有发生任何异常,则程序在执行完try语句块后直接进入else语句块。
最后,无论程序是否发生异常,都会执行finally语句块。
四.触发异常:
触发异常有两种情况:一种是程序执行中因为错误自动触发异常,另一种是显式地使用raise或assert语句手动触发异常。Python捕获与处理这两种异常的方式是相同的。
1.raise语句:可以手动触发异常,有三种方法。
a.通过类名触发异常。
在这里插入图片描述
b.通过异常类的实例对象触发异常。
在这里插入图片描述
c.重新触发异常。
在这里插入图片描述
2.assert语句:(又称断言)是有条件的触发异常。
在这里插入图片描述
其中,当表达式为真时,不触发异常;当表达式为假时,触发AssertionError异常。若给定了参数部分,则在AssertionError后将参数部分作为异常信息的一部分给出。
assert语句的主要功能是帮助程序员调试程序,以保证程序运行的正确性,因此它一般在开发调试阶段使用。
五.自定义异常:
Python中内置的异常类毕竟有限,用户有时须根据需求需设置其他异常,如学生成绩不能为负数、限定密码长度等。自定义异常类一般继承于Exception或其子类,其命名一般以Error或Exception为后缀。
六.回溯最后的异常:
当触发异常时,Python可以回溯异常并提示许多信息,这可能会给程序员定位异常位置带来不便,因此,Python中可以使用sys模块中exc_info()函数来回溯最后一次异常信息,该函数返回一个元组(type, value/message, traceback),每个元素的具体含义如下所示:
type:异常的类型。
value/message:异常的信息或者参数。
traceback:包含调用栈信息的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值