Python3 異常檢測
1、標準異常
AssertionError |
斷言語句(assert)失敗 |
AttributeError |
嘗試訪問未知的對象屬性 |
EOFError |
用戶輸入文件末尾標誌EOF(Ctrl+d) |
FloatingPointError |
浮點計算錯誤 |
GeneratorExit |
generator.close()方法被調用的時候 |
ImportError |
導入模塊失敗的時候 |
IndexError |
索引超出序列的範圍 |
KeyError |
字典中查找一個不存在的關鍵字 |
KeyboardInterrupt |
用戶輸入中斷鍵(Ctrl+c) |
MemoryError |
內存溢出(可通過刪除對象釋放內存) |
NameError |
嘗試訪問一個不存在的變量 |
NotImplementedError |
尚未實現的方法 |
OSError |
操作系統產生的異常(例如打開一個不存在的文件) |
OverflowError |
數值運算超出最大限制 |
ReferenceError |
弱引用(weak reference)試圖訪問一個已經被垃圾回收機制回收了的對象 |
RuntimeError |
一般的運行時錯誤 |
StopIteration |
叠代器沒有更多的值 |
SyntaxError |
Python的語法錯誤 |
IndentationError |
縮進錯誤 |
TabError |
Tab和空格混合使用 |
SystemError |
Python編譯器系統錯誤 |
SystemExit |
Python編譯器進程被關閉 |
TypeError |
不同類型間的無效操作 |
UnboundLocalError |
訪問一個未初始化的本地變量(NameError的子類) |
UnicodeError |
Unicode相關的錯誤(ValueError的子類) |
UnicodeEncodeError |
Unicode編碼時的錯誤(UnicodeError的子類) |
UnicodeDecodeError |
Unicode解碼時的錯誤(UnicodeError的子類) |
UnicodeTranslateError |
Unicode轉換時的錯誤(UnicodeError的子類) |
ValueError |
傳入無效的參數 |
ZeroDivisionError |
除數為零 |
2.內置異常類的層次結構
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
+-- LookupError
| +-- IndexError
| +-- KeyError
+-- MemoryError
+-- NameError
| +-- UnboundLocalError
+-- OSError
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +--
ConnectionAbortedError
| | +--
ConnectionRefusedError
| | +--
ConnectionResetError
| +-- FileExistsError
| +-- FileNotFoundError
| +-- InterruptedError
| +-- IsADirectoryError
| +-- NotADirectoryError
| +-- PermissionError
| +-- ProcessLookupError
| +-- TimeoutError
+-- ReferenceError
+-- RuntimeError
| +-- NotImplementedError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +--
UnicodeDecodeError
| +--
UnicodeEncodeError
| +--
UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+--
PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning
3、異常處理
1.try語句
try:
檢測範圍
except Exception [as reason]:
出現Exception後處理的代碼
可以有多個except與try組合,因為檢測範圍中肯能會產生多個異常,可以用多個except與try組合來關註感興趣的異常
可以同一處理多類異常 except後要用()把多個需要同一處理的異常括起來
try: int(‘abc‘) sum = 1+‘1‘ f = open(‘我是一個不存在的文檔.txt‘) print(f.read()) f.close() except (OSError, ValueError,TypeError)as reason: print(‘出錯啦T_T\n錯誤原因是:‘ + str(reason))
2.try finally語句
try:
檢測範圍
except Exception [as reason]:
出現Exception後處理的代碼
finally:
一定要做的事情(比如出錯後可以在這裏把文件關閉)
try: f = open(‘My_File.txt‘) # 當前文件夾中並不存在"My_File.txt"這個文件T_T print(f.read()) except OSError as reason: print(‘出錯啦:‘ + str(reason)) finally: if ‘f‘ in locals(): # 如果文件對象變量存在當前局部變量符號表的話,說明打開成功 f.close()
3、raise語句(引發一個異常)
raise 異常名字
try: for i in range(3): for j in range(3): if i == 2: raise KeyboardInterrupt print(i, j) except KeyboardInterrupt: print(‘退出啦!‘)
Python3 異常檢測