《Python3智能数据分析快速入门》—3.1.2 try、except与else

举报
华章计算机 发表于 2019/07/19 22:13:59 2019/07/19
【摘要】 本节书摘来自华章计算机《Python3智能数据分析快速入门》一书中的第3章,第3.1.2节,作者是李明江 张良均 周东平 张尚佳 。 

3.1.2 try、except与else

如果运行途中发生错误事件,程序的执行将中断,并创建异常对象。异常是程序在正常流程控制以外采取的动作,当它被引发时,计算机将自动寻找异常处理程序,以帮助程序恢复正常运行。

要保证程序的正常运行,就需要排除错误,错误要么是语法上的,要么是逻辑上的。语法错误的出现表明程序在结构上出现了问题,可以在程序执行前加以纠正。逻辑错误可能是缺少输入或输入不正确,某些情况下,也可能是根据输入无法生成预期的结果。逻辑错误难以预防,必须使用异常处理程序来应对。

计算机语言针对可能出现的错误定义了异常类型,某种错误引发对应的异常时,异常处理程序将被启动,从而恢复程序的正常运行。Python中定义的异常类型大致分为数值计算错误、操作系统错误、无效数据查询、Unicode相关的错误和警告等几类,如表3-2所示。

表3-2 Python异常类

image.png

 

异常体系内部有层次关系,即某些异常属于某个异常的子类,该异常又可能是另一异常的子类。较低层次、更具细节的异常是某些异常的子类,这些高层次的异常则称为基类,子类和基类是相对的。Python异常体系中的部分关系如图3-2所示。

 image.png

图3-2 Python常见异常体系

在图3-2中,越下面的异常,其层次越低,细节更明显,它们总有更高层次的基类。

Python使用try语句处理异常,该语句一般包括try、except和else三个句式,组成try-except-else的形式。try部分包含一个尝试执行的代码块,except部分是特定异常的处理对策,else部分则在程序运行正常时执行。

try语句可以视为一种条件分支,与if语句的区别是try语句并不包含条件判断式,执行的流向也不取决于条件表达式,而依赖于代码块能否执行。但其内在逻辑和运行流程与if语句是相似的,符合条件分支的特征,其基本语法格式如下。

try:

    操作语句1

except 错误类型1:

    操作语句2

except 错误类型2:

    操作语句3

else:

    操作语句4

try语句常用的语法格式及其参数说明如表3-3所示。

表3-3 try-except-else语句常用的语法格式及其参数说明

image.png

 

运行try-except-else语句时,程序首先执行try代码块,即可能出错的试探性语句,这可能导致致命性错误使得程序无法继续执行;如果try代码块确实无法执行,就可能执行某个except代码块。执行一个except代码块的条件是,系统捕捉的异常类型和该代码块标识的类型相符合;如果try代码块的语句正常执行,就接着执行else代码块的语句。如果try部分无法执行,也没有找到相应的except代码块,就将异常消息发送给程序调用端,如Python Shell,Python Shell对异常消息的默认处理则是终止程序的执行并打印具体的出错信息。这也是在Python Shell中执行程序错误后所出现的出错打印信息的由来。

在try语句中,except与else代码块都是可选的。except代码块可以有0或多个;else代码块可以有0或1个。但要注意,else语句的存在必须以except语句的存在为前提,在没有except语句的try语句中使用else语句,会引发语法错误。

try语句中没有else时,就构成try-except语句,如代码清单3-5所示。

代码清单3-5 try语句处理除零异常

image.png

image.png

在代码清单3-5中,由于0不能做除数,因此引发了除零异常。except代码块由于给出了ZeroDivisireplaceString的解决方案,因此被执行,程序得以完整地运行。

代码清单3-5所展示的异常之间的层次差别是有意义的,这在程序执行过程中可以体现,如代码清单3-6所示。

代码清单3-6 Python异常层次差异

image.png

代码清单3-6展示的try-except-else语句尝试查询不在dict中的键值对,从而引发了异常。这一异常准确地说应属于KeyError,但由于KeyError是LookupError的子类,且在代码清单3-6中将LookupError置于KeyError之前,因此程序优先执行该except代码块。所以,使用多个except代码块时,必须坚持对其规范排序,要从最具针对性的异常到最通用的异常。

除自然发生的异常外,Python中的raise语句可用于故意引发异常。使用该语句引发异常时,只需在raise后输入异常名即可,如代码清单3-7所示。

代码清单3-7 raise语句

image.png

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。