太乾了!一張圖整理了 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你們一塊兒來學習討論吧!

相關文章
相關標籤/搜索