本章是关于异常内容讲解的最后一章,重要说明关于异常的设计,就是如何用好异常
本章重点内容:
1、嵌套异常处理程序
2、异常的习惯用法
3、异常设计的建议与陷阱
接下来展开说明
1、嵌套异常处理程序
前面的例子中,我们只是使用了单个的try语句来捕捉异常,如果try语句中还有try语句,从代码运行的控制流来看,那就是try语句的嵌套,
try语句的嵌套,因为不用的情况,会有所不同
try/except语句:当异常最终引发时,Python会调回到匹配该异常,最近进入的try语句,执行该语句的except分句,然后再try语句后继续下去
try/finally语句:每个嵌套的finally代码快都会一次执行,Python会持续把异常往上传递到其他try语句上,而最终可能达到顶层默认处理程序
通过代码示例来了解这个概念会更清楚,如下:
以上代码创建了一个try/except语句的嵌套,通过最后的执行可以看到,异常时触发了action1中的,而最外层的try语句并没有触发,所以最后打印出来的就是‘inner try’
再看一个try/finally语句的例子,如下:
通过运行结果可以看到,所有的finally语句都被执行了,最终也引发了异常的提醒说明,这个可以和上面的例子对比来看
2、异常的习惯用法
跳出多重嵌套循环:“go to”
通过以下示例,就会明白什么叫跳出多重嵌套循环:
需要特别注意两个while语句的嵌套,如果仅仅是里面while语句结束,外面没有结束还是会不断地循环,而异常,是直接从最里层的循环,跳出来
异常的本质就是提醒,所以由此引申出来的用法就会很多:
-函数可以用raise语句触发状况
-断开文件和服务器连接
-使用外层try语句辅助调试
-显示错误和跟踪
3、异常设计的建议与陷阱
应该包装什么
原则上,所有的语句都可以放到try中,但是这样做很笨,所以要包装什么就显得很重要,这个需要实际的情况而定,而且要有实际项目的经验,大的原则就是经常会失败的操作一般都应该包装在try语句中
捕获了太多:避免空的except分句和Exception异常
直接使用这两个分句很容易,但是有时候会拦截到不属于本层级的异常,根据作者的经验,应当编写尽可能具体化的处理程序
捕获过少:使用基于类的异常分类
另一方面,处理程序额不应过于具体化?为什么?因为系统演化发展,将来会引发其他种类的异常,所以在异常类的设计中,要能考虑到未来的发展,以及代码修改的便捷性
以上就是本章的重点内容
根据作者的说明,截止到本章,滚与Python的主要基础内容都学完了,后面的章节是高级主题的可选阅读,至此,你可以说自己是正式的python程序员了,但是对于我本人来说,还有很长的路要走,现在也只是掌握的最基本最基本的内容,还要融会贯通,还要不断实践
本章结尾处,作者也介绍了Python的工具集、大型项目的开发工具,很多,需要自己在未来的实战中不断尝试学习
以上说明,祝学习愉快,下章见!
《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章,已完成:《Python学习手册 第五版》 -第34章 异常编写细节
2020.07.20-2020.07.26 第35章,已完成:《Python学习手册 第五版》 -第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章,未完成
以下链接,可以供你了解这个学习笔记的所有章节最新进度