更新時(shí)間:2020年11月17日18時(shí)22分 來源:傳智播客 瀏覽次數(shù):
Python程序中最常見的錯(cuò)誤為語法錯(cuò)誤。語法錯(cuò)誤又稱為解析錯(cuò)誤,它是指開發(fā)人員編寫了不符合Python語法格式的代碼所引起的錯(cuò)誤。含有語法錯(cuò)誤的程序會(huì)拋出異常,無法運(yùn)行。如下所示為一段包含語法問題的代碼:
while True
print("語法格式錯(cuò)誤")
上述示例代碼中的循環(huán)語句后少了冒號(:),不符合Python的語法格式。因此語法分析器會(huì)檢測到錯(cuò)誤。
在PyCharm中運(yùn)行上述代碼后,錯(cuò)誤信息會(huì)在結(jié)果輸出區(qū)進(jìn)行顯示,具體如下:
File " D:/Python項(xiàng)目/異常.py ", line 1
while True
^
SyntaxError: invalid syntax
以上錯(cuò)誤信息中包含了錯(cuò)誤所在的行號、錯(cuò)誤類型和具體信息,錯(cuò)誤信息中使用小箭頭(^)指出語法錯(cuò)誤的具體位置,方便開發(fā)人員快速地定位并修正。產(chǎn)生語法錯(cuò)誤時(shí)引發(fā)的異常類型為SyntaxError。
一段語法格式正確的Python代碼在運(yùn)行時(shí)產(chǎn)生的錯(cuò)誤稱為異常。如果這些異常不被處理,程序默認(rèn)的處理方式是直接崩潰。
程序運(yùn)行時(shí)產(chǎn)生異常,示例如下:
for i in 3:
print(i)
運(yùn)行代碼,結(jié)果如下所示:
Traceback (most recent call last):
File "D:/Python項(xiàng)目/異常.py", line 7, in <module>
for i in 3:
TypeError: 'int' object is not iterable
上述語句沒有任何語法格式錯(cuò)誤,但代碼執(zhí)行后出現(xiàn)TypeError異常,這是因?yàn)槭褂胒or循環(huán)對一個(gè)整數(shù)進(jìn)行遍歷,而for循環(huán)不支持對整數(shù)類型的遍歷。
在Python中所有的異常均由類實(shí)現(xiàn),所有的異常類又繼承自BaseException類,程序運(yùn)行時(shí)出現(xiàn)的異常大多繼承自Exception類。如圖1所示為Python中異常類的繼承關(guān)系。
圖1 Python中異常類的繼承關(guān)系
因?yàn)镾yntaxError、FileNotFoundError、NameError等常見異常均繼承自Exception類,所以本章主要對Exception類及其子類進(jìn)行介紹,Exception中常見的子類及其描述如表1所示。
表1 Exception中常見的子類
類名 | 描述 |
---|---|
SyntaxError | 發(fā)生語法錯(cuò)誤時(shí)引發(fā) |
FileNotFoundError | 未找到指定文件或目錄時(shí)引發(fā) |
NameError | 找不到指定名稱的變量時(shí)引發(fā) |
ZeroDivisionError | 除數(shù)為0時(shí)的異常 |
IndexError | 當(dāng)使用超出列表范圍的索引時(shí)引發(fā) |
KeyError | 當(dāng)使用映射不存在的鍵時(shí)引發(fā) |
AttributeError | 當(dāng)嘗試訪問未知對象屬性時(shí)引發(fā) |
TypeError | 當(dāng)試圖在使用a類型的場合使用b類型時(shí)引發(fā) |
北京校區(qū)