Python基礎 異常

2021-10-06 21:39:38 字數 3720 閱讀 9206

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():

raise exception

class someerror(exception): pass

def func2():

raise someerror

if __name__ == "__main__":

try:

func1()

except someerror:

這裡的exception就沒有**獲,所以還是會回溯:

(venv) e:\codes\python_everything\begining-python\src\08>list8-3.py

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

如果沒有出現異常,則會繼續往下執行,但是這裡可以有else語句來執行沒有異常時可以執行的語句,使整個邏輯更通順:

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():

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...這樣的語句來代替if...else..語句。

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 塊 是否有異常...