Python常見異常類型處理
前言:
開發(fā)人員在編寫程序時,難免會遇到錯誤,有的是編寫人員疏忽造成的語法錯誤,有的是程序內(nèi)部隱含邏輯問題造成的數(shù)據(jù)錯誤,還有的是程序運行時與系統(tǒng)的規(guī)則沖突造成的系統(tǒng)錯誤,等等。
總的來說,編寫程序時遇到的錯誤可大致分為 2 類,分別為語法錯誤和運行時錯誤。
1.Python語法錯誤
語法錯誤,也就是解析代碼時出現(xiàn)的錯誤。當(dāng)代碼不符合 Python 語法規(guī)則時,Python解釋器在解析時就會報出 SyntaxError 語法錯誤,與此同時還會明確指出最早探測到錯誤的語句。
例如:
print "Hello,World!"
我們知道,Python 3 已不再支持上面這種寫法,所以在運行時,解釋器會報如下錯誤:
SyntaxError: Missing parentheses in call to 'print'
語法錯誤多是開發(fā)者疏忽導(dǎo)致的,屬于真正意義上的錯誤,是解釋器無法容忍的,因此,只有將程序中的所有語法錯誤全部糾正,程序才能執(zhí)行。
2.Python運行時錯誤
運行時錯誤,即程序在語法上都是正確的,但在運行時發(fā)生了錯誤。
例如:
a = 1/0
上面這句代碼的意思是“用 1 除以 0,并賦值給 a 。
因為 0 作除數(shù)是沒有意義的,所以運行后會產(chǎn)生如下錯誤:
>>> a = 1/0
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
a = 1/0
ZeroDivisionError: division by zero
以上運行輸出結(jié)果中,前兩段指明了錯誤的位置,最后一句表示出錯的類型。在 Python 中,把這種運行時產(chǎn)生錯誤的情況叫做異常(Exceptions)。這種異常情況還有很多,常見的幾種異常情況如表 1 所示
表 1 Python常見異常類型:
| 異常類型 | 含義 | 實例 |
|---|---|---|
| AssertionError | 當(dāng) assert 關(guān)鍵字后的條件為假時,程序運行會停止并拋出 AssertionError 異常 | >>> demo_list = ['C語言中文網(wǎng)'] >>> assert len(demo_list) > 0 >>> demo_list.pop() 'C語言中文網(wǎng)' >>> assert len(demo_list) > 0 Traceback (most recent call last): ? File "<pyshell#6>", line 1, in <module> ??? assert len(demo_list) > 0 AssertionError |
| AttributeError | 當(dāng)試圖訪問的對象屬性不存在時拋出的異常 | >>> demo_list = ['C語言中文網(wǎng)'] >>> demo_list.len Traceback (most recent call last): ? File "<pyshell#10>", line 1, in <module> ??? demo_list.len AttributeError: 'list' object has no attribute 'len' |
| IndexError | 索引超出序列范圍會引發(fā)此異常 | >>> demo_list = ['C語言中文網(wǎng)'] >>> demo_list[3] Traceback (most recent call last): ? File "<pyshell#8>", line 1, in <module> ??? demo_list[3] IndexError: list index out of range |
| KeyError | 字典中查找一個不存在的關(guān)鍵字時引發(fā)此異常 | >>> demo_dict={'C語言中文網(wǎng)':"c.biancheng.net"} >>> demo_dict["C語言"] Traceback (most recent call last): ? File "<pyshell#12>", line 1, in <module> ??? demo_dict["C語言"] KeyError: 'C語言' |
| NameError | 嘗試訪問一個未聲明的變量時,引發(fā)此異常 | >>> C語言中文網(wǎng) Traceback (most recent call last): ? File "<pyshell#15>", line 1, in <module> ??? C語言中文網(wǎng) NameError: name 'C語言中文網(wǎng)' is not defined |
| TypeError | 不同類型數(shù)據(jù)之間的無效操作 | >>> 1+'C語言中文網(wǎng)' Traceback (most recent call last): ? File "<pyshell#17>", line 1, in <module> ??? 1+'C語言中文網(wǎng)' TypeError: unsupported operand type(s) for +: 'int' and 'str' |
| ZeroDivisionError | 除法運算中除數(shù)為 0 引發(fā)此異常 | >>> a = 1/0 Traceback (most recent call last): ? File "<pyshell#2>", line 1, in <module> ??? a = 1/0 ZeroDivisionError: division by zero |
提示:表中的異常類型不需要記住,只需簡單了解即可。
當(dāng)一個程序發(fā)生異常時,代表該程序在執(zhí)行時出現(xiàn)了非正常的情況,無法再執(zhí)行下去。默認(rèn)情況下,程序是要終止的。如果要避免程序退出,可以使用捕獲異常的方式獲取這個異常的名稱,再通過其他的邏輯代碼讓程序繼續(xù)運行,這種根據(jù)異常做出的邏輯處理叫作異常處理。
開發(fā)者可以使用異常處理全面地控制自己的程序。異常處理不僅僅能夠管理正常的流程運行,還能夠在程序出錯時對程序進行必的處理。大大提高了程序的健壯性和人機交互的友好性。
到此這篇關(guān)于Python常見異常類型處理的文章就介紹到這了,更多相關(guān)Python異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python and、or以及and-or語法總結(jié)
這篇文章主要介紹了Python and、or以及and-or語法總結(jié),本文分別給出實例講解它們的使用方法,需要的朋友可以參考下2015-04-04
python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(四):域名系統(tǒng)
當(dāng)我們在上網(wǎng)的時候,通常輸入的是網(wǎng)址,其實這就是一個域名,而我們計算機網(wǎng)絡(luò)上的計算機彼此之間只能用IP地址才能相互識別2014-06-06
如何向scrapy中的spider傳遞參數(shù)的幾種方法
這篇文章主要介紹了如何向scrapy中的spider傳遞參數(shù)的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Django框架HttpResponse和HttpRequest對象學(xué)習(xí)
這篇文章主要介紹了Django框架HttpResponse和HttpRequest對象學(xué)習(xí),有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日升職加薪2021-09-09
python?調(diào)制解調(diào)的實現(xiàn)
在Python中,可以使用SciPy和NumPy庫來處理信號,包括進行FM信號的解調(diào),本文主要介紹了python?調(diào)制解調(diào)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-03-03

