Python try except else使用詳解
在原本的try except結構的基礎上,Python 異常處理機制還提供了一個 else 塊,也就是原有 try except 語句的基礎上再添加一個 else 塊,即try except else結構。
使用 else 包裹的代碼,只有當 try 塊沒有捕獲到任何異常時,才會得到執(zhí)行;反之,如果 try 塊捕獲到異常,即便調用對應的 except 處理完異常,else 塊中的代碼也不會得到執(zhí)行。
舉個例子:
try: result = 20 / int(input('請輸入除數(shù):')) print(result) except ValueError: print('必須輸入整數(shù)') except ArithmeticError: print('算術錯誤,除數(shù)不能為 0') else: print('沒有出現(xiàn)異常') print("繼續(xù)執(zhí)行")
可以看到,在原有 try except 的基礎上,我們?yōu)槠涮砑恿?else 塊?,F(xiàn)在執(zhí)行該程序:
請輸入除數(shù):4
5.0
沒有出現(xiàn)異常
繼續(xù)執(zhí)行
如上所示,當我們輸入正確的數(shù)據(jù)時,try 塊中的程序正常執(zhí)行,Python 解釋器執(zhí)行完 try 塊中的程序之后,會繼續(xù)執(zhí)行 else 塊中的程序,繼而執(zhí)行后續(xù)的程序。
讀者可能會問,既然 Python 解釋器按照順序執(zhí)行代碼,那么 else 塊有什么存在的必要呢?直接將 else 塊中的代碼編寫在 try except 塊的后面,不是一樣嗎?
當然不一樣,現(xiàn)在再次執(zhí)行上面的代碼:
請輸入除數(shù):a
必須輸入整數(shù)
繼續(xù)執(zhí)行
可以看到,當我們試圖進行非法輸入時,程序會發(fā)生異常并被 try 捕獲,Python 解釋器會調用相應的 except 塊處理該異常。但是異常處理完畢之后,Python 解釋器并沒有接著執(zhí)行 else 塊中的代碼,而是跳過 else,去執(zhí)行后續(xù)的代碼。
也就是說,else 的功能,只有當 try 塊捕獲到異常時才能顯現(xiàn)出來。在這種情況下,else 塊中的代碼不會得到執(zhí)行的機會。而如果我們直接把 else 塊去掉,將其中的代碼編寫到 try except 的后面:
try: result = 20 / int(input('請輸入除數(shù):')) print(result) except ValueError: print('必須輸入整數(shù)') except ArithmeticError: print('算術錯誤,除數(shù)不能為 0') print('沒有出現(xiàn)異常') print("繼續(xù)執(zhí)行")
程序執(zhí)行結果為:
請輸入除數(shù):a
必須輸入整數(shù)
沒有出現(xiàn)異常
繼續(xù)執(zhí)行
可以看到,如果不使用 else 塊,try 塊捕獲到異常并通過 except 成功處理,后續(xù)所有程序都會依次被執(zhí)行。
python try except else finally 實例
class AError(Exception): """AError---exception""" print('AError') class BError(Exception): """BError---exception""" print('BError') try: # raise AError # raise BError aaaaa() except AError: print("Get AError") except BError: print("Get BError") except: print("Get Exception") else: print("do else") finally: print("finally")
1.在上面所示的完整語句中try/except/else/finally所出現(xiàn)的順序必須是try-->except X-->except-->else-->finally,即所有的except必須在else和finally之前,else(如果有的話)必須在finally之前,而except X必須在except之前。否則會出現(xiàn)語法錯誤。
2.在上面的完整語句中,else語句的存在必須以except X或者except語句為前提,如果在沒有except語句的try block中使用else語句會引發(fā)語法錯誤。也就是說else不能與try/finally配合使用。
3.try成功進else,不成功進對應的except;
4.不論是否成功except X,except的判定語句都會執(zhí)行,只是不進入;對應到以上程序就是不論哪種情況 AError BError都會打印,但是Get AError Get BError 只有拋對應的異常時才會打印。
5.finally所有情況都會執(zhí)行,可以不寫,寫了就必須在所有except else等之后;
到此這篇關于Python try except else使用詳解的文章就介紹到這了,更多相關Python try except else內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 淺談對python中if、elif、else的誤解
- python else語句在循環(huán)中的運用詳解
- python中if及if-else如何使用
- python使用for...else跳出雙層嵌套循環(huán)的方法實例
- Python while循環(huán)使用else語句代碼實例
- 在python中利用try..except來代替if..else的用法
- Python循環(huán)中else,break和continue的用法實例詳解
- python for和else語句趣談
- Python列表解析配合if else的方法
- 詳解Python if-elif-else知識點
- Python中else的三種使用場景
相關文章
Python標準模塊--ContextManager上下文管理器的具體用法
本篇文章主要介紹了Python標準模塊--ContextManager的具體用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11Python初識二叉樹續(xù)之實戰(zhàn)binarytree
binarytree庫是一個Python的第三方庫,這個庫實現(xiàn)了一些二叉樹相關的常用方法,使用二叉樹時,可以直接調用,不需要再自己實現(xiàn),下面這篇文章主要給大家介紹了關于Python初識二叉樹之實戰(zhàn)binarytree的相關資料,需要的朋友可以參考下2022-05-05詳解python架構?PyNeuraLogic超越Transformers
這篇文章主要為大家介紹了python使用?PyNeuraLogic超越Transformers示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03pandas 數(shù)據(jù)類型轉換的實現(xiàn)
這篇文章主要介紹了pandas 數(shù)據(jù)類型轉換的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12