俗話說,天有不測風(fēng)云,我們在寫程序的時候不可能是一帆風(fēng)順的,經(jīng)常會出現(xiàn)一些異常的情況,例如我們準(zhǔn)備要出門看一場電影,首先是出門,然后步行到電影院,之后看完電影去逛街,逛完街步行返回家中,但是當(dāng)我們看完電影之后發(fā)現(xiàn)外面在下雨,這時候我們就要取消后面逛街的計劃返回家中,這里的下雨就是異常情況,所以我們在程序設(shè)計的時候應(yīng)當(dāng)添加這種處理異常的方案。
下面我們先看一個異常問題,代碼如下:
number = int(input('請輸入一個數(shù)字:')) if 15 / number >= 3: print('ok') else: print('wrong')
輸出結(jié)果:
請輸入一個數(shù)字:3 ok 請輸入一個數(shù)字:15 wrong 請輸入一個數(shù)字:0 Traceback (most recent call last): File "C:/Users/test.py", line 2, in <module> if 15 / number >= 3: ZeroDivisionError: division by zero
當(dāng)我們輸入的分母為0的時候,我們會發(fā)現(xiàn)程序報錯了,這說明我們寫的程序有問題,由于我們沒有考慮到分母為0的時候該怎么處理,因此程序出現(xiàn)了異常,所以我們寫程序的時候需要考慮到一些會出現(xiàn)的異常情況,下面我們來學(xué)習(xí)幾種常見的異常情況。
1. KeyError異常
這個是訪問字典的鍵,而鍵值不存在的時候發(fā)生的異常。
代碼如下:
my_dict = {'dotcpp':123} print(my_dict['dot'])
異常如下:
Traceback (most recent call last): File "C:/Users/test.py", line 2, in <module> print(my_dict['dot']) KeyError: 'dot'
2. IndexError異常
這種異常在我們學(xué)習(xí)Python的時候比較常見,當(dāng)我們訪問序列元素的時候,索引值超出范圍的時候會觸發(fā)這種異常機制,代碼如下:
my_list = [1,2,3,4,5] print(my_list[100])
異常如下:
Traceback (most recent call last): File "C:/Users/test.py", line 2, in <module> print(my_list[100]) IndexError: list index out of range
我們的列表中只存在5個元素,訪問超出限制就會引發(fā)這種異常。
3. NameError異常
當(dāng)我們使用一個未定義的變量時會引發(fā)此異常,代碼如下:
name = ['www.dotcpp,com'] print('存在的變量name:',name) print('不存在的變量dotcpp:',dotcpp)
異常如下:
存在的變量name: ['www.dotcpp,com'] Traceback (most recent call last): File "C:/Users/輕煙/PycharmProjects/untitled1/teach/test.py", line 3, in <module> print('不存在的變量dotcpp:',dotcpp) NameError: name 'dotcpp' is not defined
4. TypeError異常
這種異常出現(xiàn)于傳遞的數(shù)據(jù)與規(guī)定的類型不一致的時候,例如當(dāng)我們要使用兩個整數(shù)相加減,這個時候其中一個使用了字符串類型,那么就會引發(fā)這種錯誤。
代碼如下:
a = 10 b = 'dotcpp' print(a+b)
異常如下:
Traceback (most recent call last): File "C:/Users/test.py", line 3, in <module> print(a+b) TypeError: unsupported operand type(s) for +: 'int' and 'str'
5. 總結(jié)
上面是幾種最常見的異常,我們在學(xué)習(xí)的過程中可能會遇到ValueError、OSError、AttributeError等多種異常,我們在遇到不認(rèn)識的異常的時候可以通過幫助文檔去查詢相關(guān)內(nèi)容。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導(dǎo)課程