<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          最全總結(jié)!一張圖整理了 Python 所有內(nèi)置異常

          共 4231字,需瀏覽 9分鐘

           ·

          2020-09-16 03:24

          在編寫程序時,可能會經(jīng)常報出一些異常,很大一方面原因是自己的疏忽大意導(dǎo)致程序給出錯誤信息,另一方面是因為有些異常是程序運行時不可避免的,比如:在爬蟲時可能有幾個網(wǎng)頁的結(jié)構(gòu)不一致,這時兩種結(jié)構(gòu)的網(wǎng)頁用同一套代碼就會出錯

          所以,我們就需要捕獲出現(xiàn)的異常,以防止程序因為錯誤信息而終止運行

          Python 有很多的內(nèi)置異常,也就是說 Python 開發(fā)者提前考慮到了用戶編程過程中可能會出現(xiàn)這類錯誤,所以制造了這些內(nèi)置異常可以快速準(zhǔn)確向用戶反饋出錯信息幫助找出代碼中的 Bug

          Python 官方文檔中也給出了所有內(nèi)置異常及觸發(fā)條件,為了更好的閱讀體驗,我把所有異常及觸發(fā)條件整理成了一張思維導(dǎo)圖:

          文末附有高清版本的獲取方式

          伙伴們可以直接劃至文末取圖,下面針對幾個常見的異常單獨介紹一下,通過舉例深入了解在什么條件下會觸發(fā)哪一種異常。

          1、SyntaxError

          SyntaxError 主要是 Python 語法發(fā)生了錯誤,比如少個冒號、多個引號之類的,編程時稍微疏忽大意一下就會出錯,應(yīng)該是最常見的一種異常錯誤了

          In?[1]:?While?True?print('1')
          ??File?"",?line?1
          ????While?True?print('1')
          ??????????^
          SyntaxError:?invalid?syntax

          2、TypeError

          TypeError 是類型錯誤,也就是說將某個操作或功能應(yīng)用于不合適類型的對象時引發(fā),比如整型與字符型進(jìn)行加減法、在兩個列表之間進(jìn)行相減操作等等

          In?[8]:?a?=?[1,2];b?=?[2,3]
          In?[9]:?a-b
          ---------------------------------------------------------------------------
          TypeError?????????????????????????????????Traceback?(most?recent?call?last)
          -9-5ae0619f8fe1>?in?
          ---->?1?a-b

          TypeError:?unsupported?operand?type(s)?for?-:?'list'?and?'list'

          3、IndexError

          IndexError 是指索引出現(xiàn)了錯誤,比如最常見下標(biāo)索引超出了序列邊界,比如當(dāng)某個序列 m 只有三個元素,卻試圖訪問 m[4]

          In?[16]:?m?=?[1,2,3]
          In?[17]:?m[4]
          ---------------------------------------------------------------------------
          IndexError????????????????????????????????Traceback?(most?recent?call?last)
          -17-94e0dfab3ff6>?in?
          ---->?1?m[4]

          IndexError:?list?index?out?of?range

          4、KeyError

          KeyError 是關(guān)鍵字錯誤,這個異常主要發(fā)生在字典中,比如當(dāng)用戶試圖訪問一個字典中不存在的鍵時會被引發(fā)

          In?[18]:?dict_?=?{'1':'yi','2':'er'}
          In?[19]:?dict_['3']
          ---------------------------------------------------------------------------
          KeyError??????????????????????????????????Traceback?(most?recent?call?last)
          -19-c2e43847635f>?in?
          ---->?1?dict_['3']

          KeyError:?'3'

          5、ValueError

          ValueError 為值錯誤,當(dāng)用戶傳入一個調(diào)用者不期望的值時會引發(fā),即使這個值的類型是正確的,比如想獲取一個列表中某個不存在值的索引

          In?[22]:?n?=?[1,2,3]
          In?[23]:?n.index(4)
          ---------------------------------------------------------------------------
          ValueError????????????????????????????????Traceback?(most?recent?call?last)
          -23-9a1887cf29d7>?in?
          ---->?1?n.index(4)

          ValueError:?4?is?not?in?list

          6、AttributeError

          AttributeError 是屬性錯誤,當(dāng)用戶試圖訪問一個對象不存在的屬性時會引發(fā),比如列表有 index 方法,而字典卻沒有,所以對一個字典對象調(diào)用該方法就會引發(fā)該異常

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

          AttributeError:?'dict'?object?has?no?attribute?'index'

          7、NameError

          NameError 是指變量名稱發(fā)生錯誤,比如用戶試圖調(diào)用一個還未被賦值或初始化的變量時會被觸發(fā)

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

          NameError:?name?'list_'?is?not?defined

          8、FileNotFoundError

          FileNotFoundError 為打開文件錯誤,當(dāng)用戶試圖以讀取方式打開一個不存在的文件時引發(fā)

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

          FileNotFoundError:?[Errno?2]?No?such?file?or?directory:?'./list'

          9、StopIteration

          StopIteration 為迭代器錯誤,當(dāng)訪問至迭代器最后一個值時仍然繼續(xù)訪問,就會引發(fā)這種異常,提醒用戶迭代器中已經(jīng)沒有值可供訪問了

          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)
          -35-5a5a8526e73b>?in?
          ---->?1?next(list2)

          10、AssertionError

          AssertionError 為斷言錯誤,當(dāng)用戶利用斷言語句檢測異常時,如果斷言語句檢測的表達(dá)式為假,則會引發(fā)這種異常

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

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

          AssertionError:

          上面這些異常應(yīng)該是平時編程中遇見頻率比較高的一部分,完整的還是要看上文的思維導(dǎo)圖或者查閱官方文檔,當(dāng)然除此之外,Python 也支持用戶根據(jù)自己的需求自定義異常,這里就不再過多概述了。

          對于異常的處理 Python 也有著比較強大的功能,比如可以捕獲異常,主動拋出異常等等,主要有下面幾種方式:

          • 1.try ... except 結(jié)構(gòu)語句捕獲
          • 2.try ... except ... finally 結(jié)構(gòu)語句捕獲
          • 3.try ... except ... else 結(jié)構(gòu)語句捕獲
          • 4.raise關(guān)鍵字主動拋出異常
          • 5.try ... raise ... except 觸發(fā)異常
          • 6.assert斷言語句
          • 7.traceback模塊跟蹤查看異常

          除了已經(jīng)下載好的思維導(dǎo)圖,也有一份在線版思維導(dǎo)圖,我是用百度腦圖繪制的

          如果你覺得導(dǎo)圖有哪部分不合理的話,可以根據(jù)自己的想法在網(wǎng)頁端在線編輯,左下角閱讀原文是參考的官方文檔鏈接

          獲取方式:公眾號后臺回復(fù)關(guān)鍵字「異常

          AirPython 公眾號的交流群已經(jīng)建立,群里可以領(lǐng)取 Python 相關(guān)學(xué)習(xí)資料,大家可以一起學(xué)習(xí)交流,效率更高,如果是想發(fā)推文、廣告、砍價小程序的敬請繞道!一定記得備注「?交流群?」,不然不會通過好友

          瀏覽 38
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美日韩一区二区A片综合 | 黄色电影一级免费 | 色色日韩 | 亚洲乱码一二三四区国产 | 国产成人黄 |