4.4 异常处理

4.4 异常处理

Python通过try-except语句来进行异常处理。

异常指的是程序运行时发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行。异常发生时,是任程序自生自灭,立刻退出终止,还是做出一定的处理呢?Python提供了一种异常处理机制。

例如,在运行下列代码时,需要进行数据输入,如果用户输入的是数字,程序会正常运行,如果输入的是非数字,则会报错。

如果运行时输入了非数字,如ab,则会报以下错误:

可以看出,Python解释器返回了异常信息,同时退出了程序。在这些信息中:“NameError”表示出现的异常类型;“Traceback”表示异常回溯标记;“---->1”表示异常发生的代码行数;“NameError:name'ab'is not defined”表示此类异常类型中异常的内容提示。

异常处理机制能让程序在异常发生时,按照代码预先设定的异常处理逻辑,有针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。Python的异常机制采用了try、except、else和finally等关键字。

·try:用于监听。将要被监听的代码,即可能产生异常的代码,放在try语句块之内,当try语句块内发生异常时,异常就被触发。

·except:处理try语句块中发生的异常。except关键字后面可以给出异常类型,也可以省略不写。如果给出异常类型,则只处理这一类型的异常。若没有给出异常类型,则可以处理所有其他异常。

·else:异常结构的else语句与for-else、while-else结构一样,当try语句正常执行结束,没有产生异常时,则执行else中的语句块,可以看成对try语句块正常执行后的一种追加处理。

·finally:不管是否发生异常,finally中的语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件),相当于一些收尾工作放在这个语句块中。

Python常用try-except语句来实现异常处理,基本格式如下:

<语句块1>是正常执行的程序内容,当发生异常时执行except保留字后面的语句块。对输入/输出数据代码加上异常处理,如下:

运行时输入了非数字,如ab,则会出现如下结果:

如果要处理多种类型的异常,则可使用多个except语句,类似于if-elif-else分支结构。基本格式如下:

对输入/输出数据代码实现多种异常处理,如下:

运行时同样输入了非数字,如ab,则会出现如下结果: