太干了!一张图整理了 Python 全部内置异常

在编写程序时,可能会常常报出一些异常,很大一方面缘由是本身的疏忽大意致使程序给出错误信息,另外一方面是由于有些异常是程序运行时不可避免的,好比在爬虫时可能有几个网页的结构不一致,这时两种结构的网页用同一套代码就会出错,因此咱们就须要捕获出现的异常,以防止程序由于错误信息而终止运行。html

Python有不少的内置异常,也就是说Python开发者提早考虑到了用户编程过程当中可能会出现这类错误,因此制造了这些内置异常能够快速准确向用户反馈出错信息帮助找出代码中的bug。python

下面针对几个常见的异常单独介绍一下,经过举例深刻了解在什么条件下会触发哪种异常。编程

一、SyntaxError

SyntaxError主要是Python语法发生了错误,好比少个冒号、多个引号之类的,编程时稍微疏忽大意一下就会出错,应该是最多见的一种异常错误了。网络

In [1]: While True print('1')
  File "<ipython-input-1-8ebf67bb4c2b>", line 1
    While True print('1')
          ^
SyntaxError: invalid syntax
复制代码

二、TypeError

TypeError是类型错误,也就是说将某个操做或功能应用于不合适类型的对象时引起,好比整型与字符型进行加减法、在两个列表之间进行相减操做等等。app

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'
复制代码

三、IndexError

IndexError是指索引出现了错误,好比最多见下标索引超出了序列边界,好比当某个序列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
复制代码

四、KeyError

KeyError是关键字错误,这个异常主要发生在字典中,好比当用户试图访问一个字典中不存在的键时会被引起。url

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'
复制代码

五、ValueError

ValueError为值错误,当用户传入一个调用者不指望的值时会引起,即便这个值的类型是正确的,好比想获取一个列表中某个不存在值的索引。spa

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
复制代码

六、AttributeError

AttributeError是属性错误,当用户试图访问一个对象不存在的属性时会引起,好比列表有index方法,而字典却没有,因此对一个字典对象调用该方法就会引起该异常。code

In [25]: dict_ = {'1':'yi','2':'er'}
In [26]: dict_.index('1')
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-26-516844ad2563> in <module>
----> 1 dict_.index('1')

AttributeError: 'dict' object has no attribute 'index'
复制代码

七、NameError

NameError是指变量名称发生错误,好比用户试图调用一个还未被赋值或初始化的变量时会被触发。htm

In [27]: print(list_)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-27-87ebf02ffcab> in <module>
----> 1 print(list_)

NameError: name 'list_' is not defined
复制代码

八、FileNotFoundError

FileNotFoundError为打开文件错误,当用户试图以读取方式打开一个不存在的文件时引起。

In [29]: fb = open('./list','r')
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-29-1b65fe5400ea> in <module>
----> 1 fb = open('./list','r')

FileNotFoundError: [Errno 2] No such file or directory: './list'
复制代码

九、StopIteration

StopIteration为迭代器错误,当访问至迭代器最后一个值时仍然继续访问,就会引起这种异常,提醒用户迭代器中已经没有值可供访问了。

In [30]: list1 = [1,2]
In [31]: list2 = iter(list1)
In [33]: next(list2)
Out[33]: 1

In [34]: next(list2)
Out[34]: 2

In [35]: next(list2)
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-35-5a5a8526e73b> in <module>
----> 1 next(list2)
复制代码

十、AssertionError

AssertionError为断言错误,当用户利用断言语句检测异常时,若是断言语句检测的表达式为假,则会引起这种异常。

In [45]: list3 = [1,2]

In [46]: assert len(list3)>2
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-46-ffd051e2ba94> in <module>
----> 1 assert len(list3)>2

AssertionError:
复制代码

上面这些异常应该是平时编程中碰见频率比较高的一部分,完整的仍是要看上文的思惟导图或者查阅官方文档,固然除此以外Python也支持用户根据本身的需求自定义异常,这里就再也不过多概述了。

对于异常的处理Python也有着比较强大的功能,好比能够捕获异常,主动抛出异常等等,主要有下面几种方式:

  • 1.try ... except 结构语句捕获
  • 2.try ... except ... finally 结构语句捕获
  • 3.try ... except ... else 结构语句捕获
  • 4.raise关键字主动抛出异常
  • 5.try ... raise ... except 触发异常
  • 6.assert断言语句
  • 7.traceback模块跟踪查看异常

本文的文字及图片来源于网络,仅供学习、交流使用,不具备任何商业用途,若有问题请及时联系咱们以做处理

想要获取更多Python学习资料能够加QQ:2955637827私聊或加Q群630390733你们一块儿来学习讨论吧!

相关文章
相关标签/搜索