2.14.2 异常的类型

给定一个值,比如9527,我们可以说这是一个实数,也可以说是一个整数,还可以更具体地说是一个正整数。更具体的类型可以更精确地描述数值的特征。

与此类似,对于异常,Python也设计了一系列的内置类型,这些类型之间有层次关系,如图2-3所示。层次分明的细分异常类型可以帮助我们更好地理解到底发生了什么。

图2-3 常见的异常类型和它们的层次关系

我们来尝试运行一些异常的代码,看看Python抛出的异常类型和给出的异常信息。

除数为0的数学计算,产生ZeroDivisionError。


>>> 3 / 0
ZeroDivisionError: division by zero

尝试打开不存在的文件,产生FileNotFoundError。


>>> open('do_not_exist.txt')
FileNotFoundError: [Errno 2] No such file or directory: 'do_not_exist.txt'

字符串和整型数相加,产生TypeError。


>>> 123 + '123'
TypeError: unsupported operand type(s) for +: 'int' and 'str'

访问未经声明的变量,产生NameError。


>>> print(abc)
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
NameError: name 'abc' is not defined

访问不存在的下标位置,产生IndexError。


>>> chars = ['a', 'b', 'c']
>>> chars[9]
IndexError: list index out of range