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