关于Python异常处理,你需要了解的知识点
什么是異常?
當(dāng)Python檢測到一個錯誤時,解釋器就無法繼續(xù)執(zhí)行了,并且給出一個錯誤提示。比如寫入文件的時候,磁盤滿了,寫不進去了,或者從網(wǎng)絡(luò)抓取數(shù)據(jù),網(wǎng)絡(luò)突然中斷。這時候,就需要捕獲處理它,否則程序會終止執(zhí)行。
異常處理
使用try/except/finally語句進行捕獲操作,并告訴Python發(fā)生異常時如何處理。
首先,檢測try語句塊中的錯誤,except語句捕獲異常信息并處理。如果在try子句執(zhí)行時沒有發(fā)生異常,Python將執(zhí)行else語句后的語句,然后控制流通過整個try語句。
如果在try后的語句里發(fā)生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層,并打印缺省的出錯信息。
語法格式
try:# 可能觸發(fā)異常的語句塊 except: # 后面跟一個錯誤類型,當(dāng)代碼發(fā)生錯誤且錯誤類型符合的時候,就會執(zhí)行except中的代碼,不寫具體錯誤類型,表示接收任何類型的異常# 這里執(zhí)行異常處理的相關(guān)代碼,打印輸出等 else:# 如果沒有異常則執(zhí)行else中的代碼 finally:# 不管代碼是否異常,都會執(zhí)行,一般是資源的關(guān)閉和釋放excep 異常/錯誤 as 別名,使用別名接收異常對象的錯誤信息。
如何捕獲多個異常?
1.寫出多行except 異常/錯誤,指定捕獲多個不同類型的異常。2.使用?except (異常1,異常2..),使用元組,在一行中捕獲多個不同類型的異常。
異常捕獲示例代碼:
拋出異常
我們使用raise語句觸發(fā)自定義異常。
語法格式:
raise 異常類名(附加異常信息) 示例代碼: s = "asdfghjklqwe" try:if len(s) > 10:raise Exception("超過10個字符") except Exception as err:print(err)自定義異常
系統(tǒng)的自帶的異常只要觸發(fā)就會自動拋出,有時候,用戶自己決定什么時候拋出,并且給異常加上一些附加信息,這時候就可以使用自定義異常。
示例代碼:
# 自定義異常類,創(chuàng)建一個類繼承Exception class MyError(Exception):pass def add(a, b):# a小于0,拋出異常if a < 0:raise MyError('自定義的異常')return a + bprint(add(-1, 5))異常定義好之后,與內(nèi)置類的用法一樣,在需要的時候raise出來就可以了。
常見的使用異常的場景
?網(wǎng)絡(luò)請求相關(guān),比如網(wǎng)絡(luò)超時、連接異常等。?資源訪問相關(guān),比如文件的權(quán)限問題、文件的路徑、文件是否存在等。?代碼邏輯相關(guān),比如越界訪問、KeyError 等。
Python標準異常
異常名稱 | 描述 |
BaseException | 所有異常的基類 |
SystemExit | 解釋器請求退出 |
KeyboardInterrupt | 用戶中斷執(zhí)行(通常是輸入^C) |
Exception | 常規(guī)錯誤的基類 |
StopIteration | 迭代器沒有更多的值 |
GeneratorExit | 生成器(generator)發(fā)生異常來通知退出 |
StandardError | 所有的內(nèi)建標準異常的基類 |
ArithmeticError | 所有數(shù)值計算錯誤的基類 |
FloatingPointError | 浮點計算錯誤 |
OverflowError | 數(shù)值運算超出最大限制 |
ZeroDivisionError | 除(或取模)零 ?(所有數(shù)據(jù)類型) |
AssertionError | 斷言語句失敗 |
AttributeError | 對象沒有這個屬性 |
EOFError | 沒有內(nèi)建輸入,到達EOF 標記 |
EnvironmentError | 操作系統(tǒng)錯誤的基類 |
IOError | 輸入/輸出操作失敗 |
OSError | 操作系統(tǒng)錯誤 |
WindowsError | 系統(tǒng)調(diào)用失敗 |
ImportError | 導(dǎo)入模塊/對象失敗 |
LookupError | 無效數(shù)據(jù)查詢的基類 |
IndexError | 序列中沒有此索引(index) |
KeyError | 映射中沒有這個鍵 |
MemoryError | 內(nèi)存溢出錯誤(對于Python 解釋器不是致命的) |
NameError | 未聲明/初始化對象 (沒有屬性) |
UnboundLocalError | 訪問未初始化的本地變量 |
ReferenceError | 弱引用(Weak reference)試圖訪問已經(jīng)垃圾回收了的對象 |
RuntimeError | 一般的運行時錯誤 |
NotImplementedError | 尚未實現(xiàn)的方法 |
SyntaxError | Python 語法錯誤 |
IndentationError | 縮進錯誤 |
TabError | Tab 和空格混用 |
SystemError | 一般的解釋器系統(tǒng)錯誤 |
TypeError | 對類型無效的操作 |
ValueError | 傳入無效的參數(shù) |
UnicodeError | Unicode 相關(guān)的錯誤 |
UnicodeDecodeError | Unicode 解碼時的錯誤 |
UnicodeEncodeError | Unicode 編碼時錯誤 |
UnicodeTranslateError | Unicode 轉(zhuǎn)換時錯誤 |
Warning | 警告的基類 |
DeprecationWarning | 關(guān)于被棄用的特征的警告 |
FutureWarning | 關(guān)于構(gòu)造將來語義會有改變的警告 |
OverflowWarning | 舊的關(guān)于自動提升為長整型(long)的警告 |
PendingDeprecationWarning | 關(guān)于特性將會被廢棄的警告 |
RuntimeWarning | 可疑的運行時行為(runtime behavior)的警告 |
SyntaxWarning | 可疑的語法的警告 |
UserWarning | 用戶代碼生成的警告 |
推薦閱讀
8 個 Python 高效數(shù)據(jù)分析的技巧
用Python求解線性規(guī)劃問題
最全的 pip 使用指南,50% 你可能沒用過。
總結(jié)
以上是生活随笔為你收集整理的关于Python异常处理,你需要了解的知识点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为了追到小姐姐,我用 Python 制作
- 下一篇: Github 移动端上架!把世界最大同性