《Python学习手册 第五版》 -第34章 异常编写细节
上一章说明的是异常的基础,讲解了简单的使用,本章讲针对编写的细节展开说明
本章重点内容:
1、try/except/else语句
2、try/finally语句
3、合并try/except/finally语句
4、raise语句
5、assert语句
接下来针对每一个重点内容展开说明
1、try/except/else语句
该语法的使用格式如下:
try:
statements
except name1:
statements
except (name2, name3):
statements
except:
statements
else:
statements
对于该语法的执行顺序和逻辑:
1)如果try代码快语句执行时发生了一个异常,Python会调回try,执行第一个符合引发异常的except分句下面的语句,当except代码快执行后,控制权就会移交到整个try语句的后面继续执行
2)如果异常发生在try代码快内,但是不能跟当前的任何except分句描述的名字相匹配,那么异常就会向上传递,如果搜索到顶层也无法匹配,Python就会终止这个程序并打印一条默认的出错信息
3)如果try首行底下执行的语句没有发生异常,Python就会执行else行下面的语句(如果有的话),之后控制权就会从整个try语句的后面继续
理解上面执行的逻辑是很重要的,接下来我们通过代码实例说明:
还是用上个章节的实例,进行修改展开说明如下:
上面代码运行后,你会发现是触发了IndexError,所以会执行其下面的语句,然后结束,所以else语句是不会被执行的
在上面的语句上,稍微修改,让try语句没有异常:
因为没有异常,所以执行else语句下面的内容,所以打印通过,通过简单的例子,理解该语法的内容很重要,可以多修改代码尝试几次
在这个基础上,需要重点提醒的一个点就是,except是顺序执行的,也就是从上到下,而且如果except语句后面没有错误名称,是默认拦截所有错误的,对上面代码稍微修改,如下:
其中需要提醒的是,这个语句必须放在所以except语句的最后
2、try/finally语句
这个语句上个章节讲过它的基础,try语句不管有没有异常,都会执行finally语句,该功能重点是用在最后不管有没有异常都要执行的“清理”工作
还是以上面为例,代码修改执行如下:
以上两个说明,不管有没有异常finally都会执行,如果有异常,会先执行finally,然后触发系统默认的异常说明
3、合并try/except/finally语句
这个比较容易理解,就是前面两个语句可以合并使用,为什么要这样提出来,因为在Python2的一些版本中,是只能分开用的,后面演变为都可以合并在一起使用,从功能上看,就是合并在一起展现,还是以上面的代码实例,修改后执行如下:
先看一下没有触发异常的情况,会按照逻辑执行下去:
以上的执行结果,和我们前面讲过的一样
如果有一场触发,如何呢?如下:
4、raise语句
raise语句是主动触发异常,你会问,为什么要主动触发,因为有些时候,异常发生后,就结束了,但是我们后面可能还会用到该异常,怎么办?就可以通过raise语句来重新引发异常
我们还是用上面代码为基础,进行修改说明:
一般的异常触发,我们都了解了,如下:
但是有时候,我们想看触发异常的详细信息,看系统会如何,这个时候可以通过raise来实现,如下:
这里要说明的是,except异常可以赋值给一个变量,此处是【A】,可以方便后续的引用
5、assert语句
assert语句是处于调试目的的一种特殊情况,语句形式如下:
assert test,data
如果test计算结果为假,那么Python就会引发异常 data项,代码示例如下:
很重要的一点,assert几乎都是用来捕获用户定义的约束条件,而不是捕捉实际的程序设计错误,因为系统会自动捕获设计错误
以上就是本章的重点内容说明,祝学习愉快,下章见!
《Python学习手册 第五版》 每章时间规划及完成进度:
2019.11.25-2019.12.01 第01章,已完成:《Python学习手册 第五版》 -第1章 问答环节
2019.12.02-2019.12.08 第02章,已完成:《Python学习手册 第五版》 -第2章 Python如何运行程序
2019.12.09-2019.12.15 第03章,已完成:《Python学习手册 第五版》 -第3章 你应如何运行Python程序
2019.12.16-2019.12.22 第04章,已完成:《Python学习手册 第五版》 -第4章 介绍Python对象类型
2019.12.23-2019.12.29 第05章,已完成:《Python学习手册 第五版》 -第5章 数值类型
2019.12.30-2020.01.05 第06章,已完成:《Python学习手册 第五版》 -第6章 动态类型
2020.01.06-2020.01.12 第07章,已完成:《Python学习手册 第五版》 -第7章 字符串基础
2020.01.12-2020.01.19 第08章,已完成:《Python学习手册 第五版》 -第8章 列表与字典
2020.01.20-2020.01.26 第09章,已完成:《Python学习手册 第五版》 -第9章 元组、文件与其他核心类型
2020.01.27-2020.02.02 第10章,已完成:《Python学习手册 第五版》 -第10章 Python语句简介
2020.02.03-2020.02.09 第11章,已完成:《Python学习手册 第五版》 -第11章 赋值、表达式和打印
2020.02.10-2020.02.16 第12章,已完成:《Python学习手册 第五版》 -第12章 if测试和语法规则
2020.02.17-2020.02.23 第13章,已完成:《Python学习手册 第五版》 -第13章 while循环和for循环
2020.02.24-2020.03.01 第14章,已完成:《Python学习手册 第五版》 -第14章 迭代和推导
2020.03.02-2020.03.08 第15章,已完成:《Python学习手册 第五版》 -第15章 文档
2020.03.09-2020.03.15 第16章,已完成:《Python学习手册 第五版》 -第16章 函数基础
2020.03.16-2020.03.22 第17章,已完成:《Python学习手册 第五版》 -第17章 作用域
2020.03.23-2020.03.29 第18章,已完成:《Python学习手册 第五版》 -第18章 参数
2020.03.30-2020.04.05 第19章,已完成:《Python学习手册 第五版》 -第19章 函数的高级话题
2020.04.06-2020.04.12 第20章,已完成:《Python学习手册 第五版》 -第20章 推导和生成
2020.04.13-2020.04.19 第21章,已完成:《Python学习手册 第五版》 -第21章 基准测试
2020.04.20-2020.04.26 第22章,已完成 :《Python学习手册 第五版》 -第22章 模块:宏伟蓝图
2020.04.27-2020.05.03 第23章,已完成:《Python学习手册 第五版》 -第23章 模块代码编写基础
2020.05.04-2020.05.10 第24章,已完成:《Python学习手册 第五版》 -第24章 模块包
2020.05.11-2020.05.17 第25章,已完成:《Python学习手册 第五版》 -第25章 高级模块话题
2020.05.18-2020.05.24 第26章,已完成:《Python学习手册 第五版》 -第26章 OOP:宏伟蓝图
2020.05.25-2020.05.31 第27章,已完成:《Python学习手册 第五版》 -第27章 类代码编写基础
2020.06.01-2020.06.07 第28章,已完成:《Python学习手册 第五版》 -第28章 一个更加实际的示例
2020.06.08-2020.06.14 第29章,已完成:《Python学习手册 第五版》 -第29章 类代码编写细节
2020.06.15-2020.06.21 第30章,已完成:《Python学习手册 第五版》 -第30章 运算符重载
2020.06.22-2020.06.28 第31章,已完成:《Python学习手册 第五版》 -第31章 类的设计
2020.06.29-2020.07.05 第32章,已完成:《Python学习手册 第五版》 -第32章 类的高级主题
2020.07.06-2020.07.12 第33章,已完成:《Python学习手册 第五版》 -第33章 异常基础
2020.07.13-2020.07.19 第34章,已完成:
2020.07.20-2020.07.26 第35章,未完成
2020.07.27-2020.08.02 第36章,未完成
2020.08.03-2020.08.09 第37章,未完成
2020.08.10-2020.08.16 第38章,未完成
2020.08.17-2020.08.23 第39章,未完成
2020.08.24-2020.08.30 第40章,未完成
2020.08.31-2020.09.06 第41章,未完成
以下链接,可以供你了解这个学习笔记的所有章节最新进度
自学笔记系列:《Python学习手册 第五版》 -写在开始之前