一张图整理了 Python 所有内置异常

在编写程序时,可能会经常报出一些异常,很大一方面原因是自己的疏忽大意导致程序给出错误信息,另一方面是因为有些异常是程序运行时不可避免的,比如在爬虫时可能有几个网页的结构不一致,这时两种结构的网页用同一套代码就会出错,所以我们就需要捕获出现的异常,以防止程序因为错误信息而终止运行 。
Python有很多的内置异常,也就是说Python开发者提前考虑到了用户编程过程中可能会出现这类错误,所以制造了这些内置异常可以快速准确向用户反馈出错信息帮助找出代码中的bug 。
Python官方文档中也给出了所有内置异常及触发条件,为了更好的阅读体验,我把所有异常及触发条件整理成了一张思维导图:

一张图整理了 Python 所有内置异常

文章插图
 
下面针对几个常见的异常单独介绍一下,通过举例深入了解在什么条件下会触发哪一种异常 。
 1. SyntaxErrorSyntaxError主要是Python语法发生了错误,比如少个冒号、多个引号之类的,编程时稍微疏忽大意一下就会出错,应该是最常见的一种异常错误了 。
In [1]: While True print('1')   File "<ipython-input-1-8ebf67bb4c2b>", line 1     While True print('1')           ^ SyntaxError: invalid syntax 2. TypeErrorTypeError是类型错误,也就是说将某个操作或功能应用于不合适类型的对象时引发,比如整型与字符型进行加减法、在两个列表之间进行相减操作等等 。
【一张图整理了 Python 所有内置异常】In [8]: a = [1,2];b = [2,3] In [9]: a-b --------------------------------------------------------------------------- TypeError                                 Traceback (most recent call last) <ipython-input-9-5ae0619f8fe1> in <module> ----> 1 a-b  TypeError: unsupported operand type(s) for -: 'list' and 'list' 3. IndexErrorIndexError是指索引出现了错误,比如最常见下标索引超出了序列边界,比如当某个序列m只有三个元素,却试图访问m[4] 。
In [16]: m = [1,2,3] In [17]: m[4] --------------------------------------------------------------------------- IndexError                                Traceback (most recent call last) <ipython-input-17-94e0dfab3ff6> in <module> ----> 1 m[4]  IndexError: list index out of range 4. KeyErrorKeyError是关键字错误,这个异常主要发生在字典中,比如当用户试图访问一个字典中不存在的键时会被引发 。
In [18]: dict_ = {'1':'yi','2':'er'} In [19]: dict_['3'] --------------------------------------------------------------------------- KeyError                                  Traceback (most recent call last) <ipython-input-19-c2e43847635f> in <module> ----> 1 dict_['3']  KeyError: '3' 5. ValueErrorValueError为值错误,当用户传入一个调用者不期望的值时会引发,即使这个值的类型是正确的,比如想获取一个列表中某个不存在值的索引 。
In [22]: n = [1,2,3] In [23]: n.index(4) --------------------------------------------------------------------------- ValueError                                Traceback (most recent call last) <ipython-input-23-9a1887cf29d7> in <module> ----> 1 n.index(4)  ValueError: 4 is not in list 6. AttributeErrorAttributeError是属性错误,当用户试图访问一个对象不存在的属性时会引发,比如列表有index方法,而字典却没有,所以对一个字典对象调用该方法就会引发该异常 。


推荐阅读