基本異常處理python
舉個簡單的例子ide
num = input(">>>") try: res = int(num) print(res) except Exception as e: # Exception是一個類,若是上面的異常出現,建立了一個e的異常對象,e封裝了全部異常的信息 print(e) print("數據類型轉換失敗")
異常分類post
python中的異常種類很是多,每一個異常專門用於處理某一項異常!!!編碼
Exception是全部錯誤類的基類(多是爸爸,也多是爺爺) 並稱之爲萬能異常,它能捕獲任意異常spa
1 AttributeError 試圖訪問一個對象沒有的樹形,好比foo.x,可是foo沒有屬性x 2 IOError 輸入/輸出異常;基本上是沒法打開文件 3 ImportError 沒法引入模塊或包;基本上是路徑問題或名稱錯誤 4 IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊 5 IndexError 下標索引超出序列邊界,好比當x只有三個元素,卻試圖訪問x[5] 6 KeyError 試圖訪問字典裏不存在的鍵 7 KeyboardInterrupt Ctrl+C被按下 8 NameError 使用一個還未被賦予對象的變量 9 SyntaxError Python代碼非法,代碼不能編譯(我的認爲這是語法錯誤,寫錯了) 10 TypeError 傳入對象類型與要求的不符合 11 UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是因爲另有一個同名的全局變量, 12 致使你覺得正在訪問它 13 ValueError 傳入一個調用者不指望的值,即便值的類型是正確的
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
dic = {'k1':'v1'} try: dic['k20'] except KeyError as e: print(e)
s1 = 'hello' try: int(s1) except ValueError as e: print(e)
dic = ["wupeiqi", 'alex'] try: dic[10] except IndexError as e: print(e) list index out of range
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 | 用戶代碼生成的警告 |
try的工做原理是,當開始一個try語句後,python就在當前程序的上下文中做標記,這樣當異常出現時就能夠回到這裏,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。操作系統
- 若是當try後的語句執行時發生異常,python就跳回到try並執行第一個匹配該異常的except子句,異常處理完畢,控制流就經過整個try語句(除非在處理異常時又引起新的異常)。
- 若是在try後的語句裏發生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層(這樣將結束程序,並打印缺省的出錯信息)。
- 若是在try子句執行時沒有發生異常,python將執行else語句後的語句(若是有else的話),而後控制流經過整個try語句。
try-finally 語句
try-finally 語句不管是否發生異常都將執行最後的代碼。code
觸發異常
能夠使用raise語句本身觸發異常對象
用戶自定義異常
經過建立一個新的異常類,程序能夠命名它們本身的異常。異常應該是典型的繼承自Exception類,經過直接或間接的方式。blog
斷言繼承
1
2
3
4
5
|
# assert 條件
assert
1
=
=
1
assert
1
=
=
2
|