Python(解釋器)遇到錯誤時會引發(fā)異常。 例如:除以零。 在本文中,您將了解Python內(nèi)置的不同異常處理。
在編寫程序時,我們經(jīng)常會遇到錯誤。
由于未遵循語言的正確結(jié)構(gòu)(語法)而導(dǎo)致的錯誤稱為語法錯誤或解析錯誤。
>>> if a < 3 File "<interactive input>", line 1 if a < 3 ^ SyntaxError: invalid syntax
在這里我們可以注意到if語句中缺少一個冒號。
錯誤也可能在運行時發(fā)生,這些被稱為異常。 例如,當(dāng)我們嘗試打開的文件不存在(FileNotFoundError),將數(shù)字除以零(ZeroDivisionError),找不到我們嘗試導(dǎo)入的模塊(ImportError)等時,就會發(fā)生這種情況。
每當(dāng)發(fā)生這種類型的運行時錯誤時,Python都會創(chuàng)建一個異常對象。如果處理不當(dāng),它將輸出對該錯誤的回溯,以及關(guān)于該錯誤發(fā)生原因的一些詳細(xì)信息。
>>> 1 / 0 Traceback (most recent call last): File "<string>", line 301, in runcode File "<interactive input>", line 1, in <module> ZeroDivisionError: division by zero >>> open("imaginary.txt") Traceback (most recent call last): File "<string>", line 301, in runcode File "<interactive input>", line 1, in <module> FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'
非法操作可能引發(fā)異常。Python中有很多內(nèi)置的異常,當(dāng)出現(xiàn)相應(yīng)的錯誤時就會引發(fā)這些異常。我們可以使用local()內(nèi)置函數(shù)查看所有的內(nèi)置異常,如下所示。
>>> locals()['__builtins__']
這將為我們返回內(nèi)置的異常,函數(shù)和屬性的字典。
下面列出了Python編程中一些常見的內(nèi)置異常以及導(dǎo)致該異常的錯誤。
例外 | 錯誤原因 |
---|---|
AssertionError | 在assert語句失敗時引發(fā)。 |
AttributeError | 在屬性分配或引用失敗時引發(fā)。 |
EOFError | 當(dāng)input()函數(shù)達(dá)到文件結(jié)束條件時引發(fā)。 |
FloatingPointError | 當(dāng)浮點運算失敗時引發(fā)。 |
GeneratorExit | 在close()調(diào)用生成器的方法時引發(fā)。 |
ImportError | 在找不到導(dǎo)入的模塊時引發(fā)。 |
IndexError | 當(dāng)序列的索引超出范圍時引發(fā)。 |
KeyError | 在字典中找不到鍵時引發(fā)。 |
KeyboardInterrupt | 當(dāng)用戶按下中斷鍵(Ctrl + c或Delete)時引發(fā)。 |
MemoryError | 在操作內(nèi)存不足時引發(fā)。 |
NameError | 在本地或全局范圍內(nèi)找不到變量時引發(fā)。 |
NotImplementedError | 尚未實現(xiàn)的方法。 |
OSError | 當(dāng)系統(tǒng)操作導(dǎo)致系統(tǒng)相關(guān)錯誤時引發(fā)。 |
OverflowError | 當(dāng)算術(shù)運算的結(jié)果太大而無法表示時引發(fā)。 |
ReferenceError | 在使用弱引用代理訪問垃圾收集的引用對象時引發(fā)。 |
RuntimeError | 當(dāng)錯誤不屬于任何其他類別時引發(fā)。 |
StopIteration | 由next()函數(shù)引發(fā),以指示迭代器沒有其他項目可返回。 |
SyntaxError | 遇到語法錯誤時由解析器引發(fā)。 |
IndentationError | 縮進(jìn)不正確時引發(fā)。 |
TabError | 當(dāng)縮進(jìn)由不一致的制表符和空格組成時引發(fā)。 |
SystemError | 在解釋器檢測到內(nèi)部錯誤時引發(fā)。 |
SystemExit | 由sys.exit()功能引發(fā)。 |
TypeError | 當(dāng)函數(shù)或操作應(yīng)用于錯誤類型的對象時引發(fā)。 |
UnboundLocalError | 在對函數(shù)或方法中的局部變量進(jìn)行引用但沒有值綁定到該變量時引發(fā)。 |
UnicodeError | 在發(fā)生與Unicode相關(guān)的編碼或解碼錯誤時引發(fā)。 |
UnicodeEncodeError | 在編碼過程中發(fā)生與Unicode相關(guān)的錯誤時引發(fā)。 |
UnicodeDecodeError | 在解碼期間發(fā)生與Unicode相關(guān)的錯誤時引發(fā)。 |
UnicodeTranslateError | 在翻譯過程中發(fā)生Unicode相關(guān)錯誤時引發(fā)。 |
ValueError | 當(dāng)函數(shù)獲取正確類型但值不正確的參數(shù)時引發(fā)。 |
ZeroDivisionError | 當(dāng)除法或模運算的第二個操作數(shù)為零時引發(fā)。 |
我們也可以在Python中定義我們自己的異常(如果需要的話)。訪問此頁面以了解有關(guān)用戶定義的異常的更多信息。
我們可以使用try、except和finally語句在Python中處理這些內(nèi)置的和用戶定義的異常。