1. try...except語句的嵌套
這種語句就是多except語句的多處理方式,下面我們通過一個例題來學(xué)習(xí)一下try...except的語句嵌套。
def test(): n = int(input('有3個語句需要測試,請選擇(1/2/3):')) if n == 1:#keyError異常情況 my_dict = {'dotcpp': 123} print(my_dict['dot']) elif n == 2:#IndexError異常 my_list = [1, 2, 3, 4, 5] print(my_list[100]) elif n == 3:#NameError異常 print('不存在的變量dotcpp:', dotcpp) try: try: try: test() except KeyError: print('KeyError異常') except IndexError: print('IndexError異常') except NameError: print('NameError異常')
我們分別測試1/2/3,輸出結(jié)果如下:
有3個語句需要測試,請選擇(1/2/3):1 KeyError異常 有3個語句需要測試,請選擇(1/2/3):2 IndexError異常 有3個語句需要測試,請選擇(1/2/3):3 NameError異常
在這個例題中,我們首先在定義的函數(shù)中輸入一個判斷量n,然后根據(jù)n的值給出了三種異常的情況,然后我們在最后嵌套了3個try..except語句,也就是說test()語句的結(jié)果會經(jīng)過三層判斷。
2. try...except...finally語句
一個完整的異常處理機(jī)制是離不開finally語句的,這個語句的作用是不管我們的程序中是否有異常發(fā)生,finally語句下的代碼都會被執(zhí)行,它的語法格式為:
try: block except [typeerror]: deal1 finally: deal2
我們通過一個例子來看一下這種結(jié)構(gòu):
def test(): n = int(input('請輸入一個整數(shù):')) print(n) try: test() except KeyError: print('KeyError異常') finally: print('finally語句已執(zhí)行')
我們分別輸入6和dotcpp來看一下輸出結(jié)果:
請輸入一個整數(shù):5 5 finally語句已執(zhí)行 請輸入一個整數(shù):dotcpp finally語句已執(zhí)行 Traceback (most recent call last): File "C:/Users/test.py", line 5, in <module> test() File "C:/Users/test.py", line 2, in test n = int(input('請輸入一個整數(shù):')) ValueError: invalid literal for int() with base 10: 'dotcpp'
通過這個例子我們可以看出,無論我們的程序是否出現(xiàn)異常,finally語句都會執(zhí)行。
3. try...except...else語句
我們在上面學(xué)習(xí)的finally語句是無論語句是否發(fā)生異常都會執(zhí)行的語句,下面我們來學(xué)習(xí)的try...except...else語句當(dāng)程序中未發(fā)生異常的時候才會執(zhí)行,它的語法結(jié)構(gòu)為:
try: block except [typeerror ]: deal1 else: deal2
下面我們看例子:
def test(): n = int(input('請輸入一個整數(shù):')) print('輸入值為:',n) try: test() except ValueError: print('ValueError異常') else: print('當(dāng)前程序未出現(xiàn)異常')
輸出結(jié)果為:
請輸入一個整數(shù):5 輸入值為: 5 當(dāng)前程序未出現(xiàn)異常
當(dāng)我們輸入值為dotcpp時
請輸入一個整數(shù):dotcpp ValueError異常
我們可以看出當(dāng)程序異常的時候else語句并沒執(zhí)行,這些語句的區(qū)分難度并不大,大家可以通過例子去練習(xí)一下這幾種常用的異常處理語句。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程