欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年06月15日 10:27:58   作者:一擼程猿  
本文整理了python異常處理中finally的兩個(gè)容易犯的錯(cuò)誤,適合新手朋友的學(xué)習(xí),感興趣的朋友可以參考下

Python異常處理機(jī)制

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

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

容易犯的錯(cuò)誤1

看下面的代碼,寫(xiě)出輸出結(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

看下面的代碼,寫(xiě)出輸出結(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)文章!

相關(guān)文章

最新評(píng)論