1. 程式人生 > >Python3 異常檢測

Python3 異常檢測

name ldp log 當前 == oat lock 出現 回收

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 異常檢測