对python中的try、except、finally 执行顺序详解
如下所示:
deftest1():
try:
print('todostuff')
raiseException('hehe')
print('toreturnintry')
return'try'
exceptException:
print('processexcept')
print('toreturninexcept')
return'except'
finally:
print('toreturninfinally')
return'finally'
test1Return=test1()
print('test1Return:'+test1Return)
输出:
todostuff processexcept toreturninexcept toreturninfinally test1Return:finally
在try中raise一个异常,就立刻转入except中执行,在except中遇到return时,就强制转到finally中执行,在finally中遇到return时就返回
deftest2():
try:
print('todostuff')
print('toreturnintry')
return'try'
exceptException:
print('processexcept')
print('toreturninexcept')
return'except'
finally:
print('toreturninfinally')
return'finally'
test2Return=test2()
print('test1Return:'+test2Return)
输出:
todostuff toreturnintry toreturninfinally test2Return:finally
这里在try中没有抛出异常,因此不会转到except中,但是在try中遇到return时,也会立即强制转到finally中执行,并在finally中返回
test1和test2得到的结论:
无论是在try还是在except中,遇到return时,只要设定了finally语句,就会中断当前的return语句,跳转到finally中执行,如果finally中遇到return语句,就直接返回,不再跳转回try/excpet中被中断的return语句
deftest3():
i=0
try:
i+=1
print('iintry:%s'%i)
raiseException('hehe')
exceptException:
i+=1
print('iinexcept:%s'%i)
returni
finally:
i+=1
print('iinfinally:%s'%i)
print('test3Return:%s'%test3())
输出:
iintry:1
iinexcept:2
iinfinally:3
test3Return:2
deftest4():
i=0
try:
i+=1
returni
finally:
i+=1
print('iinfinally:%s'%i)
print('test4Return:%s'%test4())
输出
iinfinally:2 test4Return:1
test3和test4得到的结论:
在except和try中遇到return时,会锁定return的值,然后跳转到finally中,如果finally中没有return语句,则finally执行完毕之后仍返回原return点,将之前锁定的值返回(即finally中的动作不影响返回值),如果finally中有return语句,则执行finally中的return语句。
deftest5():
foriinrange(5):
try:
print('dostuff%s'%i)
raiseException(i)
exceptException:
print('exception%s'%i)
continue
finally:
print('dofinally%s'%i)
test5()
输出
dostuff0 exception0 dofinally0 dostuff1 exception1 dofinally1 dostuff2 exception2 dofinally2 dostuff3 exception3 dofinally3 dostuff4 exception4 dofinally4
test5得到的结论:
在一个循环中,最终要跳出循环之前,会先转到finally执行,执行完毕之后才开始下一轮循环
以上这篇对python中的try、except、finally执行顺序详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。