python try finally执行顺序_python中try,except,finally的执行顺序

to do stuff

to return in try

to return in finally

test2Return : finally

这里在 try 中没有抛出异常,因此不会转到 except 中,但是在try 中遇到return时,也会立即强制转到finally中执行,并在finally中返回

test1和test2得到的结论:

无论是在try还是在except中,遇到return时,只要设定了finally语句,就会中断当前的return语句,跳转到finally中执行,如果finally中遇到return语句,就直接返回,不再跳转回try/excpet中被中断的return语句

deftest3():

i=0try:

i+= 1

print('i in try : %s'%i)raise Exception('hehe')exceptException:

i+= 1

print('i in except : %s'%i)returnifinally:

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

deftest4():

i=0try:

i+= 1

returnifinally:

i+= 1

print ('i in finally : %s'%i )print('test4Return : %s' % test4())

输出

i in finally : 2

test4Return : 1

test3和test4得到的结论:

在except和try中遇到return时,会锁定return的值,然后跳转到finally中,如果finally中没有return语句,则finally执行完毕之后仍返回原return点,将之前锁定的值返回(即finally中的动作不影响返回值),如果finally中有return语句,则执行finally中的return语句。

deftest5():for i in range(5):try:print('do stuff %s'%i)raiseException(i)exceptException: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得到的结论:

在一个循环中,最终要跳出循环之前,会先转到finally执行,执行完毕之后才开始下一轮循环

你可能感兴趣的:(python,try,finally执行顺序)