處理異常的目的是保證程式在出現錯誤的時候,可以繼續執行下去,而不會立即終止
語法:try:
**塊(可能會出錯的語句)
except 異常型別 as異常名:
**塊(出現錯誤的處理方式)
except 異常型別 as 異常名:
**塊(出現錯誤的處理方式)
…else:
**塊(沒有錯誤時執行的語句)
finally:
**塊(是否有異常都回執行)
print
('程式開始...'
)try
:print(20
/0)except
print
('程式出錯啦'
)else
;print
('程式正常'
)finally
:print
('hello'
)
#函式中異常不進行處理
deffn()
:print
('hello'
)print(10
/0)#函式中對異常進行處理
deffn1()
:try
:print(10
/0)except
:print
('fn1函式中有錯誤,請檢查...'
)print
('hello'
)#呼叫函式時對異常處理
try:
fn()except
:print
('出錯了'
)#執行時,程式不會報錯
print
('hello'
)fn(
)#執行時,程式會報錯
fn1(
)#執行時,程式不會報
通過上面的**可以看出
1、如果函式中沒有對異常進行處理,則異常會繼續想函式呼叫處傳播
2、當在函式**現異常,若在函式中對異常進行處理,則異常不會傳播
3、函式呼叫處對異常進行處理,則不在傳播,如果沒有處理,則繼續向呼叫處傳播,直到傳播到全域性作用域,如果依然沒有處理,則程式停止,並且顯示異常資訊
當程式執行過程**現異常以後,所有異常資訊會被專門儲存到乙個異常物件中,而異常傳播時,實際就是異常物件跑給了呼叫處
print
('程式開始,異常出現前'
)try
:print
(a)print(20
/0)except
:print
('程式出錯了!!!'
)print
('異常出現後'
)
print
('程式開始,異常出現前'
)try
:print
(a)print(20
/0)except nameerror:
print
('出現nameerror!!!'
)print
('異常出現後'
)
print
('程式開始,異常出現前'
)try
:print
(a)print(20
/0)except exception as e:
print
('程式出錯了!!!'
)print
(e,tpye(e)
)print
('異常出現後'
)
通過上面三個**塊可以看出:
1、except後面不跟任何內容可以捕獲所有異常
2、except後面跟乙個異常型別,則只會捕獲該型別的異常
3、如果except後跟的是exception 它會捕獲到所有的異常
4、exception 是所以異常類的父類
class
myerror
(exception)
:#定義異常類
print
('引數中有負數'
)def
fn(a,b)
:if a<
0or b<0:
raise myerror
r=a+b
return r
print
(fn(-1
,2))
通過上面**塊可以看出,可以通過raise丟擲異常資訊,
丟擲異常的目的,告訴呼叫者這裡呼叫時可能出現問題,希望呼叫者處理下
raise後面需要跟乙個異常類或者異常例項
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基礎 異常
python中遇到錯誤後,會引發異常。python中使用異常物件來表示異常情況。如果異常物件未被處理或者捕捉,程式就會用所謂的回溯 traceback 來終止執行。下面是乙個例子 def func1 raise exception if name main func1 執行之後報錯 venv e c...