第十三章 异常

1.异常的概念:在生活中,使用计算机中的某个应用软件时,由于某种错误,可能会引发异常。在程序中,当Python检测到一个错误时,解释器就会指出当前流程已无法继续执行下去,这时就出现了异常。例如,使用print()函数输出一个未定义的变量值。
2.异常类:BaseException是异常的顶级类,但用户定义的类不能直接继承这个类,而是要继承Exception。Exception类是与应用相关异常的顶层基类,除了系统退出事件类(SystemExit、KeyboardInterrupt和GeneratorExit)之外,几乎所有用户定义的类都应该继承自这个类,而不是BaseException类。
3.捕获与处理异常:为了防止程序运行中遇到异常而意外终止,开发时应对可能出现的异常进行捕获并处理。Python程序使用try、except、else、finally这4个关键字来实现异常的捕获与处理。
4.try-except语句
当try语句块中某条语句出现异常时,程序就不再执行try语句块中后面的语句,而是直接执行except语句块。
5.使用as获取异常信息
为了区分不同的异常,可以使用as关键字来获取异常信息。
6.try-except-else语句
try-except-else语句用于处理未捕获到异常的情形,如果try语句内出现了异常,则执行except语句块,否则执行else语句块。
7.try-finally语句:在try-finally语句中,无论try语句块中是否发生异常,finally语句块中的代码都会执行,其中,finally语句块用于清理在try块中执行的操作,如释放其占有的资源(如文件对象、数据库连接、图形句柄等)。
8.try-finally语句:在讲解文件打开与关闭时,本书使用的就是with-as语句。with后面的表达式的结果将生成一个支持环境管理协议的对象,该对象中定义了__enter__() 和__exit__()方法。在with内部的语句块执行之前调用__enter__()方法运行构造代码,如果在as后面指定了一个变量,则将返回值和这个变量名绑定。当with内部语句块执行结束后,自动调用__exit__()方法,同时执行必要的清理工作,不管执行过程中有无异常发生。
以上学习了try-except语句、try-except-else语句和try-finally语句,在实际开发中,经常需要将3种语句结合起来使用。
9.try-finally语句:程序先执行try语句块,若try语句块中的某一语句执行时发生异常,则程序跳转到except语句,从上到下判断抛出的异常是否与except后面的异常类相匹配,并执行第一个匹配该异常的except后面的语句块。
若try语句块中发生了异常,但是没有找到匹配的异常类,则执行不带任何匹配类型的except语句块。
若没有发生任何异常,则程序在执行完try语句块后直接进入else语句块。
最后,无论程序是否发生异常,都会执行finally语句块。
10.触发异常:触发异常有两种情况:一种是程序执行中因为错误自动触发异常,另一种是显式地使用raise或assert语句手动触发异常。Python捕获与处理这两种异常的方式是相同的。本节主要介绍手动触发异常。
11.raise语句:.
(1) 通过类名触发异常
该方法只需指明异常类便可创建异常类的实例对象并触发异常.
(2)通过异常类的实例对象触发异常
该方法只需指明异常类的实例对象便可触发异常.。
(3)raise语句还可以重新触发异常。
12.assert语句:assert语句(又称断言)是有条件的触发异常。
其中,当表达式为真时,不触发异常;当表达式为假时,触发AssertionError异常。若给定了参数部分,则在AssertionError后将参数部分作为异常信息的一部分给出。
assert语句的主要功能是帮助程序员调试程序,以保证程序运行的正确性,因此它一般在开发调试阶段使用。
13.自定义异常:Python中内置的异常类毕竟有限,用户有时须根据需求需设置其他异常,如学生成绩不能为负数、限定密码长度等。自定义异常类一般继承于Exception或其子类,其命名一般以Error或Exception为后缀。
14.回溯最后的异常:当触发异常时,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、付费专栏及课程。

余额充值