亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python學習之異常中的finally使用詳解

 更新時間:2022年03月15日 15:33:05   作者:渴望力量的哈士奇  
這篇文章主要為大家介紹一下Python異常語法中的另一個成員—finally,通過學習finally,可以幫助我們更好的處理異常,快來跟隨小編一起學習一下吧

今天我們來學習一下 異常語法 中的另一個成員 —> finally ; 通過學習 finally ,可以幫助我們更好的處理異常。

finally 的功能與用法

finally 的功能:finally的是最后的意思,配合異常的語法來說,它就是最后執(zhí)行的代碼塊。

無論是否發(fā)生了異常,一定會執(zhí)行 finally 的代碼塊

在函數(shù)中,即便在 try 或 except 中進行了 return 也依舊會執(zhí)行 finally 代碼塊

try 語法 至少要伴隨 except 或 finally 中的一個

finally 的用法:示例如下

try:
    <代碼塊1>
except:
    <代碼塊2>
finally:
    <代碼塊3>

finally 示例案例

def test():
    try:
        1 / 0
    except Exception as e:
        print(e)
    finally:
        print('通用異常捕獲已完成')


result = test()
print(result)

# >>> 執(zhí)行結(jié)果如下:
# >>> division by zero
# >>> 通用異常捕獲已完成

finally 觸發(fā)的必然性與優(yōu)先級

接下來我們看看 在 try 或 except 中進行了 return 的場景:

def test():
    try:
        1 / 0
    except Exception as e:
        return e
    finally:
        print('通用異常捕獲已完成')


result = test()
print(result)

# >>> 執(zhí)行結(jié)果如下:
# >>> 通用異常捕獲已完成
# >>> division by zero

這里我們是不是發(fā)現(xiàn)了一個問題?先輸出的 finally 代碼塊,后輸出的 except 的 代碼塊。

Python 程序的執(zhí)行順序是自上而下執(zhí)行的,為什么會出現(xiàn)這樣的結(jié)果呢?我么嘗試在 except 的 代碼塊增加一行輸出的測試代碼,看一下執(zhí)行的順序究竟是什么樣的。

def test():
    try:
        1 / 0
    except Exception as e:
        print('exception——test')
        return e
    finally:
        print('通用異常捕獲已完成')


result = test()
print(result)

# >>> 執(zhí)行結(jié)果如下:
# >>> exception——test
# >>> 通用異常捕獲已完成
# >>> division by zero

從執(zhí)行結(jié)果可以得出結(jié)論,程序依然是自上而下執(zhí)行的。其實造成這樣結(jié)果的原因是捕獲到異常后會將異常信息賦值給變量 e 返回,在調(diào)用test()時將返回值賦值給了 result ,因此在打印時可以得到的結(jié)果就是先輸出的 finally 的代碼塊,再輸出的 result 的賦值結(jié)果 。

同時也在次印證了我們上文針對 finally 的功能的描述 :try 或 except 中進行了 return 也依舊會執(zhí)行 finally 代碼塊。

既然 except 的代碼塊我們得到了證實,那么 try 的代碼塊呢?

def test():
    try:
        print('try_test')
        return 'try'
    except Exception as e:
        print(e)
    finally:
        print('通用異常捕獲已完成')


result = test()
print(result)

# >>> 執(zhí)行結(jié)果如下:
# >>> try_test
# >>> 通用異常捕獲已完成
# >>> try

# >>> 得出了同樣的 finally 必然觸發(fā)性 的結(jié)論

再思考一個問題,之前我們的 finally 的代碼塊 都是輸出的 print 語句,如果我們在 try 或 except 與 finally 的代碼塊 中都使用 return ,那么會返回誰的 return 的結(jié)果呢?

def test():
    try:
        1 / 0
    except Exception as e:
        return e
    finally:
        return '通用異常捕獲已完成'


result = test()
print(result)

# >>> 執(zhí)行結(jié)果如下:
# >>> 通用異常捕獲已完成

從執(zhí)行結(jié)果我們看到, except 與 finally 的代碼塊 中都使用 return ,同時我們也知道會先觸發(fā) except 代碼塊的 return ,但是最終返回的依然是 finally 的代碼塊 中都使用 return。

雖然 except 代碼塊有 return ,但是因為 finally 的代碼塊 中也使用了 return ,所以我們的程序最終還是選擇了 finally 的代碼塊 中的 return 進行返回。最終得出 finally 的代碼塊 中的 return 返回的級別更高的結(jié)論。

try 語法 伴隨 except 或 finally 的必然性

我們看下面的一個小例子

def test():
    try:
        1 / 0
    finally:
        print('通用異常捕獲已完成')


result = test()
print(result)

# >>> 執(zhí)行結(jié)果如下:
# >>> 通用異常捕獲已完成
# >>> Traceback (most recent call last):
# >>> 	File "D:\PycharmProjects\XXX\XXX.py", line 81, in <module>
# >>> 	    result = test()
# >>>   File "D:\PycharmProjects\XXX\XXX.py", line 76, in test
# >>>       1 / 0
# >>>   ZeroDivisionError: division by zero

可以看到,雖然產(chǎn)生了報錯,但是我們的 finally 代碼塊依然被執(zhí)行了。讓我們試試在這種情況下,直接使用 return 會怎么樣?

def test():
    try:
        1 / 0
    finally:
        return '通用異常捕獲已完成'


result = test()
print(result)

# >>> 執(zhí)行結(jié)果如下:
# >>> 通用異常捕獲已完成

此時我們發(fā)現(xiàn), finally 代碼塊依然被執(zhí)行了,不僅如此,剛剛出現(xiàn)的錯誤也被忽略了。說明當 try 出現(xiàn)異常的時候會被直接忽略,直接跳轉(zhuǎn)到 finally 的代碼塊。

這就是 try 與 finally 的組合效果,不過在我們平時的工作中,還是希望 使用 try 配合 except 將 異常類型(信息) 友好的打印出來,再進行return 會更好。

finally 的歷史

在 python 2.5 版本之前, finally 需要獨立使用不可以和 try 進行配合,在 python 2.5 版本 之后才演變成了現(xiàn)在這個樣子。

如果未來有機會使用較老版本的 python ,看到這樣的情況,不要覺得奇怪。

到此這篇關于Python學習之異常中的finally使用詳解的文章就介紹到這了,更多相關Python異常 finally內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python中生成隨機整數(shù)的三種方法

    Python中生成隨機整數(shù)的三種方法

    本文介紹了如何在Python中生成一到一百隨機整數(shù)的多種方法,包括random庫,NumPy庫和random.sample函數(shù)這三種方法,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • python如何在終端里面顯示一張圖片

    python如何在終端里面顯示一張圖片

    這篇文章主要為大家詳細介紹了python如何在終端里面顯示一張圖片的方法,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Python Web框架Flask中使用七牛云存儲實例

    Python Web框架Flask中使用七牛云存儲實例

    這篇文章主要介紹了Python Web框架Flask中使用七牛云存儲實例,本文也對七牛云存儲Python SDK的一個使用示例,需要的朋友可以參考下
    2015-02-02
  • 理解python正則表達式

    理解python正則表達式

    這篇文章主要介紹了python正則表達式,在python中,對正則表達式的支持是通過re模塊來支持的,想要了解python正則表達式的朋友可以參考一下
    2016-01-01
  • 對python中Librosa的mfcc步驟詳解

    對python中Librosa的mfcc步驟詳解

    今天小編就為大家分享一篇對python中Librosa的mfcc步驟詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python導出hive數(shù)據(jù)表的schema實例代碼

    python導出hive數(shù)據(jù)表的schema實例代碼

    這篇文章主要介紹了python導出hive數(shù)據(jù)表的schema實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python中self用法實例詳解

    Python中self用法實例詳解

    這篇文章主要介紹了Python中self用法詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Python使用SQLite和Excel操作進行數(shù)據(jù)分析

    Python使用SQLite和Excel操作進行數(shù)據(jù)分析

    這篇文章主要介紹了Python使用SQLite和Excel操作進行數(shù)據(jù)分析,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python?函數(shù)參數(shù)11個案例分享

    Python?函數(shù)參數(shù)11個案例分享

    大家好,今天給大家分享一下明哥整理的一篇?Python?參數(shù)的內(nèi)容,內(nèi)容非常的干,全文通過案例的形式來理解知識點,自認為比網(wǎng)上?80%?的文章講的都要明白,如果你是入門不久的?python?新手,相信本篇文章應該對你會有不小的幫助,需要的朋友可以參考下
    2023-02-02
  • Python自定義類的數(shù)組排序?qū)崿F(xiàn)代碼

    Python自定義類的數(shù)組排序?qū)崿F(xiàn)代碼

    這篇文章主要介紹了Python自定義類的數(shù)組排序?qū)崿F(xiàn)代碼,需要的朋友可以參考下
    2016-08-08

最新評論