<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>

          關(guān)于Python異常處理,你需要了解的知識點(diǎn)

          共 2674字,需瀏覽 6分鐘

           ·

          2020-03-18 23:25

          2e731bca19d25d42b51735f2da36837e.webp

          什么是異常?

          當(dāng)Python檢測到一個(gè)錯(cuò)誤時(shí),解釋器就無法繼續(xù)執(zhí)行了,并且給出一個(gè)錯(cuò)誤提示。比如寫入文件的時(shí)候,磁盤滿了,寫不進(jìn)去了,或者從網(wǎng)絡(luò)抓取數(shù)據(jù),網(wǎng)絡(luò)突然中斷。這時(shí)候,就需要捕獲處理它,否則程序會終止執(zhí)行。

          異常處理

          使用try/except/finally語句進(jìn)行捕獲操作,并告訴Python發(fā)生異常時(shí)如何處理。

          首先,檢測try語句塊中的錯(cuò)誤,except語句捕獲異常信息并處理。如果在try子句執(zhí)行時(shí)沒有發(fā)生異常,Python將執(zhí)行else語句后的語句,然后控制流通過整個(gè)try語句。

          如果在try后的語句里發(fā)生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層,并打印缺省的出錯(cuò)信息。

          語法格式

          try:    # 可能觸發(fā)異常的語句塊except:  # 后面跟一個(gè)錯(cuò)誤類型,當(dāng)代碼發(fā)生錯(cuò)誤且錯(cuò)誤類型符合的時(shí)候,就會執(zhí)行except中的代碼,不寫具體錯(cuò)誤類型,表示接收任何類型的異常    # 這里執(zhí)行異常處理的相關(guān)代碼,打印輸出等else:    # 如果沒有異常則執(zhí)行else中的代碼finally    # 不管代碼是否異常,都會執(zhí)行,一般是資源的關(guān)閉和釋放

          excep 異常/錯(cuò)誤 as 別名,使用別名接收異常對象的錯(cuò)誤信息。

          如何捕獲多個(gè)異常?

          1.寫出多行except 異常/錯(cuò)誤,指定捕獲多個(gè)不同類型的異常。2.使用?except (異常1,異常2..),使用元組,在一行中捕獲多個(gè)不同類型的異常。
          異常捕獲示例代碼:

          try:    print(10/0)except NameError:    print('出現(xiàn) NameError 異常')except ZeroDivisionError:    print('出現(xiàn) ZeroDivisionError 異常')except IndexError:    print('出現(xiàn) IndexError 異常')except Exception as e :    print('未知異常',e,type(e))finally :    print('無論是否出現(xiàn)異常,該子句都會執(zhí)行')

          拋出異常

          我們使用raise語句觸發(fā)自定義異常。

          語法格式:

          raise 異常類名(附加異常信息)
          示例代碼:s = "asdfghjklqwe"try:    if len(s) > 10:        raise Exception("超過10個(gè)字符")except Exception as err:    print(err)

          自定義異常

          系統(tǒng)的自帶的異常只要觸發(fā)就會自動拋出,有時(shí)候,用戶自己決定什么時(shí)候拋出,并且給異常加上一些附加信息,這時(shí)候就可以使用自定義異常。

          示例代碼:

          # 自定義異常類,創(chuàng)建一個(gè)類繼承Exceptionclass MyError(Exception):    passdef add(a, b):    # a小于0,拋出異常    if a < 0:        raise MyError('自定義的異常')    return a + b
          print(add(-1, 5))

          異常定義好之后,與內(nèi)置類的用法一樣,在需要的時(shí)候raise出來就可以了。

          常見的使用異常的場景

          ?網(wǎng)絡(luò)請求相關(guān),比如網(wǎng)絡(luò)超時(shí)、連接異常等。?資源訪問相關(guān),比如文件的權(quán)限問題、文件的路徑、文件是否存在等。?代碼邏輯相關(guān),比如越界訪問、KeyError 等。

          Python標(biāo)準(zhǔn)異常

          異常名稱

          描述



          BaseException

          所有異常的基類

          SystemExit

          解釋器請求退出

          KeyboardInterrupt

          用戶中斷執(zhí)行(通常是輸入^C)

          Exception

          常規(guī)錯(cuò)誤的基類

          StopIteration

          迭代器沒有更多的值

          GeneratorExit

          生成器(generator)發(fā)生異常來通知退出

          StandardError

          所有的內(nèi)建標(biāo)準(zhǔn)異常的基類

          ArithmeticError

          所有數(shù)值計(jì)算錯(cuò)誤的基類

          FloatingPointError

          浮點(diǎn)計(jì)算錯(cuò)誤

          OverflowError

          數(shù)值運(yùn)算超出最大限制

          ZeroDivisionError

          除(或取模)零 ?(所有數(shù)據(jù)類型)

          AssertionError

          斷言語句失敗

          AttributeError

          對象沒有這個(gè)屬性

          EOFError

          沒有內(nèi)建輸入,到達(dá)EOF 標(biāo)記

          EnvironmentError

          操作系統(tǒng)錯(cuò)誤的基類

          IOError

          輸入/輸出操作失敗

          OSError

          操作系統(tǒng)錯(cuò)誤

          WindowsError

          系統(tǒng)調(diào)用失敗

          ImportError

          導(dǎo)入模塊/對象失敗

          LookupError

          無效數(shù)據(jù)查詢的基類

          IndexError

          序列中沒有此索引(index)

          KeyError

          映射中沒有這個(gè)鍵

          MemoryError

          內(nèi)存溢出錯(cuò)誤(對于Python 解釋器不是致命的)

          NameError

          未聲明/初始化對象 (沒有屬性)

          UnboundLocalError

          訪問未初始化的本地變量

          ReferenceError

          弱引用(Weak reference)試圖訪問已經(jīng)垃圾回收了的對象

          RuntimeError

          一般的運(yùn)行時(shí)錯(cuò)誤

          NotImplementedError

          尚未實(shí)現(xiàn)的方法

          SyntaxError

          Python 語法錯(cuò)誤

          IndentationError

          縮進(jìn)錯(cuò)誤

          TabError

          Tab 和空格混用

          SystemError

          一般的解釋器系統(tǒng)錯(cuò)誤

          TypeError

          對類型無效的操作

          ValueError

          傳入無效的參數(shù)

          UnicodeError

          Unicode 相關(guān)的錯(cuò)誤

          UnicodeDecodeError

          Unicode 解碼時(shí)的錯(cuò)誤

          UnicodeEncodeError

          Unicode 編碼時(shí)錯(cuò)誤

          UnicodeTranslateError

          Unicode 轉(zhuǎn)換時(shí)錯(cuò)誤

          Warning

          警告的基類

          DeprecationWarning

          關(guān)于被棄用的特征的警告

          FutureWarning

          關(guān)于構(gòu)造將來語義會有改變的警告

          OverflowWarning

          舊的關(guān)于自動提升為長整型(long)的警告

          PendingDeprecationWarning

          關(guān)于特性將會被廢棄的警告

          RuntimeWarning

          可疑的運(yùn)行時(shí)行為(runtime behavior)的警告

          SyntaxWarning

          可疑的語法的警告

          UserWarning

          用戶代碼生成的警告

          推薦閱讀

          8 個(gè) Python 高效數(shù)據(jù)分析的技巧

          用Python求解線性規(guī)劃問題

          最全的 pip 使用指南,50% 你可能沒用過。

          瀏覽 50
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  欧美成人久久 | 欧美黄色宗合一级二级三级 | 久久网国产 | 人人人人操| 豆花无码视频一区二区 |