對python中的try、except、finally 執(zhí)行順序詳解
如下所示:
def test1():
try:
print('to do stuff')
raise Exception('hehe')
print('to return in try')
return 'try'
except Exception:
print('process except')
print('to return in except')
return 'except'
finally:
print('to return in finally')
return 'finally'
test1Return = test1()
print('test1Return : ' + test1Return)
輸出:
to do stuff process except to return in except to return in finally test1Return : finally
在 try 中 raise一個異常,就立刻轉(zhuǎn)入 except 中執(zhí)行,在except 中遇到 return 時,就強(qiáng)制轉(zhuǎn)到 finally 中執(zhí)行, 在 finally 中遇到 return 時就返回
def test2():
try:
print('to do stuff')
print('to return in try')
return 'try'
except Exception:
print('process except')
print('to return in except')
return 'except'
finally:
print('to return in finally')
return 'finally'
test2Return = test2()
print('test1Return : ' + test2Return)
輸出:
to do stuff to return in try to return in finally test2Return : finally
這里在 try 中沒有拋出異常,因此不會轉(zhuǎn)到 except 中,但是在try 中遇到return時,也會立即強(qiáng)制轉(zhuǎn)到finally中執(zhí)行,并在finally中返回
test1和test2得到的結(jié)論:
無論是在try還是在except中,遇到return時,只要設(shè)定了finally語句,就會中斷當(dāng)前的return語句,跳轉(zhuǎn)到finally中執(zhí)行,如果finally中遇到return語句,就直接返回,不再跳轉(zhuǎn)回try/excpet中被中斷的return語句
def test3():
i = 0
try:
i += 1
print('i in try : %s'%i)
raise Exception('hehe')
except Exception:
i += 1
print('i in except : %s'%i)
return i
finally:
i += 1
print ('i in finally : %s'%i )
print('test3Return : %s'% test3())
輸出:
i in try : 1
i in except : 2
i in finally : 3
test3Return : 2
def test4():
i = 0
try:
i += 1
return i
finally:
i += 1
print ('i in finally : %s'%i )
print('test4Return : %s' % test4())
輸出
i in finally : 2 test4Return : 1
test3和test4得到的結(jié)論:
在except和try中遇到return時,會鎖定return的值,然后跳轉(zhuǎn)到finally中,如果finally中沒有return語句,則finally執(zhí)行完畢之后仍返回原return點(diǎn),將之前鎖定的值返回(即finally中的動作不影響返回值),如果finally中有return語句,則執(zhí)行finally中的return語句。
def test5():
for i in range(5):
try:
print('do stuff %s'%i)
raise Exception(i)
except Exception:
print('exception %s'%i)
continue
finally:
print('do finally %s'%i)
test5()
輸出
do stuff 0 exception 0 do finally 0 do stuff 1 exception 1 do finally 1 do stuff 2 exception 2 do finally 2 do stuff 3 exception 3 do finally 3 do stuff 4 exception 4 do finally 4
test5得到的結(jié)論:
在一個循環(huán)中,最終要跳出循環(huán)之前,會先轉(zhuǎn)到finally執(zhí)行,執(zhí)行完畢之后才開始下一輪循環(huán)
以上這篇對python中的try、except、finally 執(zhí)行順序詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- python try except 捕獲所有異常的實(shí)例
- Python使用try except處理程序異常的三種常用方法分析
- Python異常處理:try、except、else、finally的全面解析
- Python中的異常處理try/except/finally/raise用法分析
- python try except返回異常的信息字符串代碼實(shí)例
- python嵌套try...except如何使用詳解
- Python try except else使用詳解
- python中try Except拋出異常的使用方式
- Python中 try / except / else / finally 異常處理方法詳解
相關(guān)文章
matplotlib如何設(shè)置坐標(biāo)軸刻度的個數(shù)及標(biāo)簽的方法總結(jié)
這里介紹兩種設(shè)置坐標(biāo)軸刻度的方法,一種是利用pyplot提交的api去進(jìn)行設(shè)置,另一種是通過調(diào)用面向?qū)ο蟮腶pi, 即通過matplotlib.axes.Axes去設(shè)置,需要的朋友可以參考下2021-06-06
Python使用Traits庫實(shí)現(xiàn)對象屬性
Python作為一種動態(tài)編程語言,它的變量沒有類型,這種靈活性給快速開發(fā)帶來很多便利,不過它也不是沒有缺點(diǎn),Traits庫的一個很重要的目的就是為了解決這些缺點(diǎn)所帶來的問題,trait為Python對象的屬性增加了類型定義的功能2023-11-11
python利用pandas和csv包向一個csv文件寫入或追加數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于python利用pandas和csv包向一個csv文件寫入或追加數(shù)據(jù)的相關(guān)資料,我們越來越多的使用pandas進(jìn)行數(shù)據(jù)處理,有時需要向一個已經(jīng)存在的csv文件寫入數(shù)據(jù),需要的朋友可以參考下2023-07-07
Django 設(shè)置多環(huán)境配置文件載入問題
這篇文章主要介紹了Django 設(shè)置多環(huán)境配置文件載入問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02
Python使用django搭建web開發(fā)環(huán)境
這篇文章主要為大家詳細(xì)介紹了Python使用django搭建web開發(fā)環(huán)境,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06

