首页 > Python笔记 阅读数:12

Python异常简介

在程序编写过程中,通常有一个 80/20 原则,即将 80% 的精力花费在 20% 的事情上,而这 20% 的事情就是处理各种可能出现的错误或异常。如果想编写一个完善的高容错运行程序,且不使用异常处理机制,那么程序中将充斥着各种 if 语句,用于处理各种可能的意外。如果是这样的话,整个程序的结构就会变得臃肿且混乱。

而事实上,由于程序员本身存在思维盲点,即使再简单的程序,要把其中所有可能出现的错误都预想到,也是不现实的。由于无法做到“考虑完备”,Python 可能会在运行时发生各类异常(Exception)。因此,一个健壮的程序,通常都要设置异常处理模块。

异常也称为例外,指的是所有可能造成计算机无法正常处理的情况,如果没有进行妥善的安排,严重的话将使计算机宕机。异常处理是一种特定的程序错误处理机制,是为了让程序员更加关注正常的程序执行序列而设计的。

我们先来观察如下代码,感性体会异常的表现。
In [1] : 10 * (2 / 0)
ZeroDivisionError Traceback (most recent call last) <ipython-input-l-93811cdc0b4a> in <module>
ZeroDivisionError: division by zero
-------------------------------------------------------------------------------------------------------
In [2]: 4 + num * 2
NameError Traceback (most recent call last) <ipython-input-2-17d576eb8202> in <module>
NameError: name 'num' is not defined
---------------------------------------------------------------------------------------------------------
In [3]: '4' +4
TypeError Traceback (most recent call last)<ipython-input-3-28186fbed058〉 in <module>
TypeError: must be str, not int
--------------------------------------------------------------------------------------------------------
In [4]: f = open("123.txt", 'r')
FileNotFoundError Traceback (most recent call last) <ipython-input-4-b3e7bml69ccb〉 in <module>
FileNotFoundError: [Errno 2] No such file or directory: '123.txt'

在上面的代码中,我们分别演示了 ZeroDivisionError(除零错误)、NameError(命名错误)、TypeError(类型错误)和 FileNotFoundError(文件未发现错误)等异常情况。错误信息的前半部分显示了异常发生的上下文,并以回溯(Traceback,一种错误信息)方式终止了执行。

有了异常,就应该有相应的异常处理手段,这样才能确保这些异常不会导致数据丢失或系统运行遭到破坏等灾难性后果。

在处理异常时,需要注意以下两点:
Python 通过面向对象的方法来处理异常。在一个方法的运行过程中,如果发生了异常,则这个方法将生成代表该异常的一个对象,并把它交给运行时系统,运行时系统将寻找相应的代码来处理这一异常。

相关文章