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