這種語句就是多except語句的多處理方式,下面我們透過一個例題來學習try...except的語句嵌套。
deftest():n=int(input('有3個語句需要測試,請選擇(1/2/3):'))ifn==1:#keyError異常情況my_dict={'dotcpp':123}print (my_dict['dot'])elifn==2:#IndexError異常my_list=[1,2,3,4,5]print(my_list[100])eli fn==3:#NameError異常print('不存在的變數dotcpp:',dotcpp)try:try:try:test()exceptKeyError:print('KeyError異常')exceptIndexError:print('IndexError異常')exceptNameError: print('NameError異常')
我們分別測試1/2/3,輸出結果如下:
有3個語句需要測試,請選擇(1/2/3):1KeyError異常有3個語句需要測試,請選擇(1/2/3):2IndexError異常有3個語句需要測試,請選擇(1/ 2/3):3NameError異常
在這個例題中,我們首先在定義的函數中輸入一個判斷量n,然後根據n的值給出了三種異常的情況,然後我們在最後嵌套了3個try..except語句,也就是說test()語句的結果會經過三層判斷。
一個完整的異常處理機制是離不開finally語句的,這個語句的作用是不管我們的程式中是否有異常發生,finally語句下的程式碼都會被執行,它的語法格式為:
try:blockexcept[typeerror]:deal1finally:deal2
我們透過一個例子來看一下這種結構:
deftest():n=int(input('請輸入一個整數:'))print(n)try:test()exceptKeyError:print('KeyError異常')finally:print('finally語句已執行')
我們分別輸入6和dotcpp來看輸出結果:
請輸入一個整數:55finally語句已執行請輸入一個整數:dotcppfinally語句已執行Traceback(mostrecentcalllast):FileC:/Users/test.py,line5,in<module> test()FileC:/Users/test.py,line2,intestn=int(input('請輸入一個整數:'))ValueError:invalidliteralforint()withbase10:'dotcpp'
透過這個例子我們可以看出,無論我們的程式是否出現異常,finally語句都會執行。
我們在上面學習的finally語句是無論語句是否發生異常都會執行的語句,下面我們來學習的try...except...else語句當程式中未發生異常的時候才會執行,它的語法結構為:
try:blockexcept[typeerror]:deal1else:deal2
下面我們來看例子:
deftest():n=int(input('請輸入一個整數:'))print('輸入值為:',n)try:test()exceptValueError:print('ValueError異常')else:print('當前程序未出現異常')
輸出結果為:
請輸入一個整數:5輸入值為:5目前程式未出現異常
當我們輸入值為dotcpp時
請輸入一個整數:dotcppValueError異常
我們可以看出當程式異常的時候else語句並沒有執行,這些語句的區分難度並不大,大家可以透過例子去練習一下這幾種常用的異常處理語句。