佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Python異常處理中容易犯得錯(cuò)誤總結(jié)

Python異常處理中容易犯得錯(cuò)誤總結(jié)

熱門標(biāo)簽:呼叫中心市場(chǎng)需求 服務(wù)器配置 銀行業(yè)務(wù) 網(wǎng)站文章發(fā)布 檢查注冊(cè)表項(xiàng) 智能手機(jī) 美圖手機(jī) 鐵路電話系統(tǒng)

Python異常處理機(jī)制

如果try異常處理中存在finally,finally中的代碼總會(huì)得到執(zhí)行

下面例子只是作為演示,不用去糾結(jié)業(yè)務(wù)邏輯

容易犯的錯(cuò)誤1

看下面的代碼,寫出輸出結(jié)果

def dig_dig1():
    while True:
        print("I'm in while loop")
        try:
            print("I'm in try")
            raise EOFError
        except IOError:
            print("IOEoor")
        finally:
            print("I'm in finally")
            break


dig_dig1()

原以為會(huì)輸出的結(jié)果:

I'm in while loop
I'm in try
I'm in finally
EOFError

Process finished with exit code 1

運(yùn)行結(jié)果

I'm in while loop
I'm in try
I'm in finally

Process finished with exit code 0
  1. 如果異常處理中存在finally, finally總會(huì)被執(zhí)行;
  2. 那么在執(zhí)行finally之前,try中的產(chǎn)生的異常將會(huì)被臨時(shí)保存起來(lái),當(dāng)finally的代碼執(zhí)行完成后,再拋出異常;
  3. 但當(dāng)finally中存在raise或return或break時(shí), try中的異常將會(huì)被拋棄。

容易犯的錯(cuò)誤2

看下面的代碼,寫出輸出結(jié)果

def dig_dig2(index):
    try:
        print("I'm in try")
        if index  0:
            raise IndexError
        else:
            return index
    except IndexError:
        print("I'm in except")
        return "except"
    finally:
        print("I'm in finally")
        return "finally"


print(dig_dig2(12))

原以為會(huì)輸出的結(jié)果:

I'm in try
12

運(yùn)行結(jié)果

I'm in try
I'm in finally
finally

Process finished with exit code 0
  1. 如果異常處理中存在finally, finally總會(huì)被執(zhí)行。
  2. 如果在try塊語(yǔ)句中存在return的同時(shí)又存在finally塊語(yǔ)句,那么將會(huì)在執(zhí)行try塊語(yǔ)句中return語(yǔ)句之前去執(zhí)行finally語(yǔ)句塊,然后再回來(lái)執(zhí)行try塊語(yǔ)句中return語(yǔ)句。
  3. 但是例子中在finally塊語(yǔ)句中存在return語(yǔ)句,整個(gè)函數(shù)已結(jié)束,所以try塊語(yǔ)句中return語(yǔ)句將永遠(yuǎn)得不到執(zhí)行。

總結(jié)

一般情況下,如果異常處理中存在finally, finally總會(huì)被執(zhí)行。但是,存在以下情況就需要注意:

  1. 在執(zhí)行finally之前,try中的產(chǎn)生的異常將會(huì)被臨時(shí)保存起來(lái),當(dāng)finally的代碼執(zhí)行完成后,再拋出異常; 但當(dāng)finally中存在raise或return或break時(shí), try中的異常將會(huì)被拋棄。
  2. 如果在try塊語(yǔ)句中存在return的同時(shí)又存在finally塊語(yǔ)句,那么將會(huì)在執(zhí)行try塊語(yǔ)句中return語(yǔ)句之前去執(zhí)行finally語(yǔ)句塊,然后再回來(lái)執(zhí)行try塊語(yǔ)句中return語(yǔ)句。但是在finally塊語(yǔ)句中存在return語(yǔ)句,整個(gè)函數(shù)已結(jié)束,所以try塊語(yǔ)句中return語(yǔ)句將永遠(yuǎn)得不到執(zhí)行。

以上就是Python異常處理中容易犯得錯(cuò)誤總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于python 異常處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 淺談python中的錯(cuò)誤與異常
  • Python基礎(chǔ)之語(yǔ)法錯(cuò)誤和異常詳解
  • Python運(yùn)行錯(cuò)誤異常代碼含義對(duì)照表
  • 新手常見Python錯(cuò)誤及異常解決處理方案
  • 使用Python將Exception異常錯(cuò)誤堆棧信息寫入日志文件
  • Python學(xué)習(xí)筆記之錯(cuò)誤和異常及訪問(wèn)錯(cuò)誤消息詳解
  • Python 錯(cuò)誤和異常小結(jié)
  • Python錯(cuò)誤和異常總結(jié)詳細(xì)

標(biāo)簽:長(zhǎng)治 河南 樂山 上海 紅河 新疆 滄州 沈陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python異常處理中容易犯得錯(cuò)誤總結(jié)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    大田县| 安平县| 建昌县| 陵水| 应城市| 观塘区| 育儿| 三河市| 杭锦后旗| 五指山市| 攀枝花市| 青田县| 临安市| 临汾市| 忻州市| 安西县| 安福县| 偏关县| 顺昌县| 江城| 山东省| 枞阳县| 民乐县| 白城市| 嵩明县| 彩票| 怀宁县| 西平县| 当雄县| 车险| 建水县| 宕昌县| 靖边县| 古蔺县| 阆中市| 通河县| 都兰县| 吉林市| 綦江县| 青浦区| 隆德县|