Python try except else使用詳解
在原本的try except結(jié)構(gòu)的基礎(chǔ)上,Python 異常處理機(jī)制還提供了一個(gè) else 塊,也就是原有 try except 語(yǔ)句的基礎(chǔ)上再添加一個(gè) else 塊,即try except else結(jié)構(gòu)。
使用 else 包裹的代碼,只有當(dāng) try 塊沒(méi)有捕獲到任何異常時(shí),才會(huì)得到執(zhí)行;反之,如果 try 塊捕獲到異常,即便調(diào)用對(duì)應(yīng)的 except 處理完異常,else 塊中的代碼也不會(huì)得到執(zhí)行。
舉個(gè)例子:
try: result = 20 / int(input(’請(qǐng)輸入除數(shù):’)) print(result)except ValueError: print(’必須輸入整數(shù)’)except ArithmeticError: print(’算術(shù)錯(cuò)誤,除數(shù)不能為 0’)else: print(’沒(méi)有出現(xiàn)異常’)print('繼續(xù)執(zhí)行')
可以看到,在原有 try except 的基礎(chǔ)上,我們?yōu)槠涮砑恿?else 塊。現(xiàn)在執(zhí)行該程序:請(qǐng)輸入除數(shù):45.0沒(méi)有出現(xiàn)異常繼續(xù)執(zhí)行
如上所示,當(dāng)我們輸入正確的數(shù)據(jù)時(shí),try 塊中的程序正常執(zhí)行,Python 解釋器執(zhí)行完 try 塊中的程序之后,會(huì)繼續(xù)執(zhí)行 else 塊中的程序,繼而執(zhí)行后續(xù)的程序。
讀者可能會(huì)問(wèn),既然 Python 解釋器按照順序執(zhí)行代碼,那么 else 塊有什么存在的必要呢?直接將 else 塊中的代碼編寫在 try except 塊的后面,不是一樣嗎?
當(dāng)然不一樣,現(xiàn)在再次執(zhí)行上面的代碼:請(qǐng)輸入除數(shù):a必須輸入整數(shù)繼續(xù)執(zhí)行
可以看到,當(dāng)我們?cè)噲D進(jìn)行非法輸入時(shí),程序會(huì)發(fā)生異常并被 try 捕獲,Python 解釋器會(huì)調(diào)用相應(yīng)的 except 塊處理該異常。但是異常處理完畢之后,Python 解釋器并沒(méi)有接著執(zhí)行 else 塊中的代碼,而是跳過(guò) else,去執(zhí)行后續(xù)的代碼。
也就是說(shuō),else 的功能,只有當(dāng) try 塊捕獲到異常時(shí)才能顯現(xiàn)出來(lái)。在這種情況下,else 塊中的代碼不會(huì)得到執(zhí)行的機(jī)會(huì)。而如果我們直接把 else 塊去掉,將其中的代碼編寫到 try except 的后面:
try: result = 20 / int(input(’請(qǐng)輸入除數(shù):’)) print(result)except ValueError: print(’必須輸入整數(shù)’)except ArithmeticError: print(’算術(shù)錯(cuò)誤,除數(shù)不能為 0’)print(’沒(méi)有出現(xiàn)異常’)print('繼續(xù)執(zhí)行')
程序執(zhí)行結(jié)果為:請(qǐng)輸入除數(shù):a必須輸入整數(shù)沒(méi)有出現(xiàn)異常繼續(xù)執(zhí)行
可以看到,如果不使用 else 塊,try 塊捕獲到異常并通過(guò) except 成功處理,后續(xù)所有程序都會(huì)依次被執(zhí)行。
python try except else finally 實(shí)例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.在上面所示的完整語(yǔ)句中try/except/else/finally所出現(xiàn)的順序必須是try-->except X-->except-->else-->finally,即所有的except必須在else和finally之前,else(如果有的話)必須在finally之前,而except X必須在except之前。否則會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。
2.在上面的完整語(yǔ)句中,else語(yǔ)句的存在必須以except X或者except語(yǔ)句為前提,如果在沒(méi)有except語(yǔ)句的try block中使用else語(yǔ)句會(huì)引發(fā)語(yǔ)法錯(cuò)誤。也就是說(shuō)else不能與try/finally配合使用。
3.try成功進(jìn)else,不成功進(jìn)對(duì)應(yīng)的except;
4.不論是否成功except X,except的判定語(yǔ)句都會(huì)執(zhí)行,只是不進(jìn)入;對(duì)應(yīng)到以上程序就是不論哪種情況 AError BError都會(huì)打印,但是Get AError Get BError 只有拋對(duì)應(yīng)的異常時(shí)才會(huì)打印。
5.finally所有情況都會(huì)執(zhí)行,可以不寫,寫了就必須在所有except else等之后;
到此這篇關(guān)于Python try except else使用詳解的文章就介紹到這了,更多相關(guān)Python try except else內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向2. CentOS郵件服務(wù)器搭建系列—— POP / IMAP 服務(wù)器的構(gòu)建( Dovecot )3. django創(chuàng)建css文件夾的具體方法4. .NET SkiaSharp 生成二維碼驗(yàn)證碼及指定區(qū)域截取方法實(shí)現(xiàn)5. Java中equals()知識(shí)點(diǎn)總結(jié)6. css代碼優(yōu)化的12個(gè)技巧7. jsp網(wǎng)頁(yè)實(shí)現(xiàn)貪吃蛇小游戲8. ASP中if語(yǔ)句、select 、while循環(huán)的使用方法9. 將properties文件的配置設(shè)置為整個(gè)Web應(yīng)用的全局變量實(shí)現(xiàn)方法10. MyBatis JdbcType 與Oracle、MySql數(shù)據(jù)類型對(duì)應(yīng)關(guān)系說(shuō)明
