对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执行顺序详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。