干!一张图整理了 Python 所有内置异常
在編寫程序時,可能會經常報出一些異常,很大一方面原因是自己的疏忽大意導致程序給出錯誤信息,另一方面是因為有些異常是程序運行時不可避免的,比如在爬蟲時可能有幾個網頁的結構不一致,這時兩種結構的網頁用同一套代碼就會出錯,所以我們就需要捕獲出現的異常,以防止程序因為錯誤信息而終止運行。
Python有很多的內置異常,也就是說Python開發者提前考慮到了用戶編程過程中可能會出現這類錯誤,所以制造了這些內置異常可以快速準確向用戶反饋出錯信息幫助找出代碼中的bug。
Python官方文檔中也給出了所有內置異常及觸發條件,為了更好的閱讀體驗,我把所有異常及觸發條件整理成了一張思維導圖:
文末附有高清版本的獲取方式,伙伴們可以直接劃至文末取圖,下面針對幾個常見的異常單獨介紹一下,通過舉例深入了解在什么條件下會觸發哪一種異常。
1、SyntaxError
SyntaxError主要是Python語法發生了錯誤,比如少個冒號、多個引號之類的,編程時稍微疏忽大意一下就會出錯,應該是最常見的一種異常錯誤了。
In?[1]:?While?True?print('1')File?"<ipython-input-1-8ebf67bb4c2b>",?line?1While?True?print('1')^ SyntaxError:?invalid?syntax2、TypeError
TypeError是類型錯誤,也就是說將某個操作或功能應用于不合適類型的對象時引發,比如整型與字符型進行加減法、在兩個列表之間進行相減操作等等。
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-bTypeError:?unsupported?operand?type(s)?for?-:?'list'?and?'list'3、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?range4、KeyError
KeyError是關鍵字錯誤,這個異常主要發生在字典中,比如當用戶試圖訪問一個字典中不存在的鍵時會被引發。
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、ValueError
ValueError為值錯誤,當用戶傳入一個調用者不期望的值時會引發,即使這個值的類型是正確的,比如想獲取一個列表中某個不存在值的索引。
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?list6、AttributeError
AttributeError是屬性錯誤,當用戶試圖訪問一個對象不存在的屬性時會引發,比如列表有index方法,而字典卻沒有,所以對一個字典對象調用該方法就會引發該異常。
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'7、NameError
NameError是指變量名稱發生錯誤,比如用戶試圖調用一個還未被賦值或初始化的變量時會被觸發。
In?[27]:?print(list_) --------------------------------------------------------------------------- NameError?????????????????????????????????Traceback?(most?recent?call?last) <ipython-input-27-87ebf02ffcab>?in?<module> ---->?1?print(list_)NameError:?name?'list_'?is?not?defined8、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'9、StopIteration
StopIteration為迭代器錯誤,當訪問至迭代器最后一個值時仍然繼續訪問,就會引發這種異常,提醒用戶迭代器中已經沒有值可供訪問了。
In?[30]:?list1?=?[1,2] In?[31]:?list2?=?iter(list1) In?[33]:?next(list2) Out[33]:?1In?[34]:?next(list2) Out[34]:?2In?[35]:?next(list2) --------------------------------------------------------------------------- StopIteration?????????????????????????????Traceback?(most?recent?call?last) <ipython-input-35-5a5a8526e73b>?in?<module> ---->?1?next(list2)10、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)>2AssertionError:上面這些異常應該是平時編程中遇見頻率比較高的一部分,完整的還是要看上文的思維導圖或者查閱官方文檔,當然除此之外Python也支持用戶根據自己的需求自定義異常,這里就不再過多概述了。
對于異常的處理Python也有著比較強大的功能,比如可以捕獲異常,主動拋出異常等等,主要有下面幾種方式:
1.try ... except 結構語句捕獲
2.try ... except ... finally 結構語句捕獲
3.try ... except ... else 結構語句捕獲
4.raise關鍵字主動拋出異常
5.try ... raise ... except 觸發異常
6.assert斷言語句
7.traceback模塊跟蹤查看異常
除了已經下載好的思維導圖,也有一份在線版思維導圖,我是用百度腦圖繪制的,如果你覺得導圖有哪部分不合理的話,可以根據自己的想法在網頁端在線編輯,左下角閱讀原文是參考的官方文檔鏈接。
獲取方式:公眾號后臺回復關鍵字「異常」
——??e n d?———— 由于微信平臺算法改版,公號內容將不再以時間排序展示,如果大家想第一時間看到我們的推送,強烈建議星標我們和給我們多點點【在看】。星標具體步驟為: (1)點擊頁面最上方“小詹學Python”,進入公眾號主頁。 (2)點擊右上角的小點點,在彈出頁面點擊“設為星標”,就可以啦。 感謝支持,比心。總結
以上是生活随笔為你收集整理的干!一张图整理了 Python 所有内置异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 良心之作!超过 10000+ 的互联网团
- 下一篇: 肝!22款超好用的CLI工具