聊聊python中的異常嵌套
在Python中,異常也可以嵌套,當內(nèi)層代碼出現(xiàn)異常時,指定異常類型與實際類型不符時,則向外傳,如果與外面的指定類型符合,則異常被處理,直至最外層,運用默認處理方法進行處理,即停止程序,并拋出異常信息。如下代碼:
try: try: raise IndexError except TypeError: print(’get handled’)except SyntaxError: print(’ok’)
運行程序:
Traceback (most recent call last):File '<pyshell#47>', line 3, in <module>raise IndexErrorIndexError
再看另一個被外層try-except捕獲的例子:
try: try: 1/0 finally: print(’finally’)except: print(’ok’)
運行:
finallyok
這里值得注意的是except:可以捕獲所有的異常,但實際上這樣做也有缺點,即有時候會包住預定的異常。
另外,需要提到的是raise A from B,將一個異常與另一個異常關聯(lián)起來,如果from后面的B沒有被外層捕獲,那么A,B異常都將拋出,例如:
try: 1/0except Exception as E: raise TypeError(’bad’) from E
運行:
Traceback (most recent call last):File '<pyshell#4>', line 2, in <module>1/0ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
Traceback (most recent call last):File '<pyshell#4>', line 4, in <module>raise TypeError(’bad’) from ETypeError: bad
相反,如果外層捕獲了B:
try: try: 1/0 except Exception as E: raise TypeError from Eexcept TypeError: print(’no’
運行:
no
最后,再看看try-finally在嵌套中的表現(xiàn)。
try: try: 1/0 finally: print(’finally’)except: print(’ok’)
運行:
finallyok
不管有沒有異常發(fā)生,或者其是否被處理,finally的代碼都要執(zhí)行,如果異常被處理,則停止,如果沒有被處理,向外走,直至最終沒處理,采用默認方法處理,上例中,異常在最外層被處理。
try: try: 1/0 except Exception as E: print(’happens’) finally: print(’finally’)except E: print(’get handled’)
運行:
happensfinally
異常在內(nèi)部被處理,不再向外傳播。
以上就是聊聊python中的異常嵌套的詳細內(nèi)容,更多關于python 異常嵌套的資料請關注好吧啦網(wǎng)其它相關文章!
相關文章:
1. XML在語音合成中的應用2. HTTP協(xié)議常用的請求頭和響應頭響應詳解說明(學習)3. 不要在HTML中濫用div4. ASP將數(shù)字轉(zhuǎn)中文數(shù)字(大寫金額)的函數(shù)5. .NET Framework各版本(.NET2.0 3.0 3.5 4.0)區(qū)別6. jscript與vbscript 操作XML元素屬性的代碼7. HTML5實戰(zhàn)與剖析之觸摸事件(touchstart、touchmove和touchend)8. php使用正則驗證密碼字段的復雜強度原理詳細講解 原創(chuàng)9. ASP基礎入門第四篇(腳本變量、函數(shù)、過程和條件語句)10. XML入門的常見問題(三)
