首页 > 编程 > Python > 正文

python中 try、except、finally 的执行顺序

2019-11-10 19:54:34
字体:
来源:转载
供稿:网友
 
 
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 stuffprocess exceptto return in exceptto return in finallytest1Return : finally

 在 try 中 raise一个异常,就立刻转入 except 中执行,在except 中遇到 return 时,就强制转到 finally 中执行, 在 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 stuffto return in tryto return in finallytest2Return : finally

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

test1和test2得到的结论:

无论是在try还是在except中,遇到return时,只要设定了finally语句,就会中断当前的return语句,跳转到finally中执行,如果finally中遇到return语句,就直接返回,不再跳转回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 : 1i in except : 2i in finally : 3test3Return : 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 : 2test4Return : 1

test3和test4得到的结论:

在except和try中遇到return时,会锁定return的值,然后跳转到finally中,如果finally中没有return语句,则finally执行完毕之后仍返回原return点,将之前锁定的值返回(即finally中的动作不影响返回值),如果finally中有return语句,则执行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 0exception 0do finally 0do stuff 1exception 1do finally 1do stuff 2exception 2do finally 2do stuff 3exception 3do finally 3do stuff 4exception 4do finally 4

test5得到的结论:

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表