python中遇到錯誤後,會引發異常。
python中使用異常物件來表示異常情況。
如果異常物件未被處理或者捕捉,程式就會用所謂的回溯(traceback)來終止執行。
下面是乙個例子:
def func1():
raise exception
if __name__ == "__main__":
func1()
執行之後報錯:
(venv) e:\codes\python_everything\begining-python\src\08>list8-2.py
traceback (most recent call last):
file "e:\codes\python_everything\begining-python\src\08\list8-2.py", line 19, in func1()
file "e:\codes\python_everything\begining-python\src\08\list8-2.py", line 15, in func1
raise exception
exception
異常有不同的型別,exception是基礎類,下面還有各種子類:
+-- exception
+-- stopiteration
+-- standarderror
| +-- buffererror
| +-- arithmeticerror
| | +-- floatingpointerror
| | +-- overflowerror
| | +-- zerodivisionerror
| +-- assertionerror
| +-- attributeerror
| +-- environmenterror
| | +-- ioerror
| | +-- oserror
| | +-- windowserror (windows)
| | +-- vmserror (vms)
| +-- eoferror
| +-- importerror
| +-- lookuperror
| | +-- indexerror
| | +-- keyerror
| +-- memoryerror
| +-- nameerror
| | +-- unboundlocalerror
| +-- referenceerror
| +-- runtimeerror
| | +-- notimplementederror
| +-- syntaxerror
| | +-- indentationerror
| | +-- taberror
| +-- systemerror
| +-- typeerror
| +-- valueerror
| +-- unicodeerror
| +-- unicodedecodeerror
| +-- unicodeencodeerror
| +-- unicodetranslateerror
還可以通過繼承exception來實現自己的類:
class someerror(exception): pass
def func2():
raise someerror
if __name__ == "__main__":
func2()
異常可以**捉,需要使用try...except...語句:
class someerror(exception): pass
def func2():
raise someerror
if __name__ == "__main__":
try:
func2()
except someerror:
這裡捕捉到了引數,所以就不會回溯:
(venv) e:\codes\python_everything\begining-python\src\08>list8-3.py但是如果是其它的異常:
def func1():這裡的exception就沒有**獲,所以還是會回溯:raise exception
class someerror(exception): pass
def func2():
raise someerror
if __name__ == "__main__":
try:
func1()
except someerror:
(venv) e:\codes\python_everything\begining-python\src\08>list8-3.py如果沒有出現異常,則會繼續往下執行,但是這裡可以有else語句來執行沒有異常時可以執行的語句,使整個邏輯更通順:traceback (most recent call last):
file "e:\codes\python_everything\begining-python\src\08\list8-3.py", line 27, in func1()
file "e:\codes\python_everything\begining-python\src\08\list8-3.py", line 15, in func1
raise exception
exception
if __name__ == "__main__":
try:
print("no exception")
except someerror:
else:
結果如下:
(venv) e:\codes\python_everything\begining-python\src\08>list8-3.py
no exception
但是有時即使發生了無法捕捉的異常,也想要執行一些語句,這個時候就可以使用finally語句:
def func1():python中更傾向於使用try...except...這樣的語句來代替if...else..語句。raise exception
class someerror(exception): pass
def func2():
raise someerror
if __name__ == "__main__":
try:
func1()
except someerror:
else:
finally:
print("do something")
python異常基礎
try後面至少要有一項,亦可以選擇 except else finally中的任意組合 assert語句一般用於開發時對程式條件的驗證,只有當內建 debug 為true時,assert語句才有效。當python指令碼以 o選項編譯成為位元組碼檔案時,assert 語句將被移除。except 帶引數...
Python基礎 異常
google c style中禁止使用異常。python中也有異常,就簡單分享一下。1 0就會產生異常。按自己的方式出錯 raise語句 raise exception traceback most recent all last 自定義異常類 class somecustomexception e...
python基礎 異常
處理異常的目的是保證程式在出現錯誤的時候,可以繼續執行下去,而不會立即終止 語法 try 塊 可能會出錯的語句 except 異常型別 as異常名 塊 出現錯誤的處理方式 except 異常型別 as 異常名 塊 出現錯誤的處理方式 else 塊 沒有錯誤時執行的語句 finally 塊 是否有異常...