1. 程式人生 > >11-18 異常處理

11-18 異常處理

使用try和except可以處理異常
try是需要處理的程式碼
except後跟一個錯誤型別,當代嗎發生錯誤且錯誤型別符合時,就會執行except中的程式碼
except支援多分支
有沒有所有一個可以處理型別的型別(萬能異常 Exception)
1.雖然有了萬能異常,任然需要將能預測到的問題單獨處理
2.單獨處理的所有機智都應該解除安裝萬能異常之前
else:沒有異常的時候執行else中的程式碼
finally:不管是否有異常,finally中的程式碼都會執行
1.finally和return相遇的時候,finally中的程式碼依然會執行
2.finally一般在函式中用,不管是否異常,去做一些收尾工作
try:
    ret = int(input('number>>>'))
    print(ret*'*')
except ValueError:
    print('輸入型別有誤,請輸入一個數字!')
except IndexError:
    print('超出列表最大長度')
except Exception:
    print('你錯了,老鐵')
except Exception as error:
print('你錯了,老鐵',error)
finally: print('不管是否有異常,finally中的程式碼都會執行')

常用異常

AttributeError 試圖訪問一個物件沒有的樹形,比如foo.x,但是foo沒有屬性x
IOError 輸入/輸出異常;基本上是無法開啟檔案
ImportError 無法引入模組或包;基本上是路徑問題或名稱錯誤
IndentationError 語法錯誤(的子類) ;程式碼沒有正確對齊
IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
KeyError 試圖訪問字典裡不存在的鍵
KeyboardInterrupt Ctrl+C被按下
NameError 使用一個還未被賦予物件的變數
SyntaxError Python程式碼非法,程式碼不能編譯(個人認為這是語法錯誤,寫錯了)
TypeError 傳入物件型別與要求的不符合
UnboundLocalError 試圖訪問一個還未被設定的區域性變數,基本上是由於另有一個同名的全域性變數,導致你以為正在訪問它
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