当前位置:脚本大全 > > 正文

python中tryexcept的用法(对python中的try、except、finally 执行顺序详解)

时间:2022-01-28 01:21:08类别:脚本大全

python中tryexcept的用法

对python中的try、except、finally 执行顺序详解

如下所示:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 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)
  • 输出:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • to do stuff
  • process except
  • to return in except
  • to return in finally
  • test1Return : finally
  • 在 try 中 raise一个异常,就立刻转入 except 中执行,在except 中遇到 return 时,就强制转到 finally 中执行, 在 finally 中遇到 return 时就返回

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 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)
  • 输出:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 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语句

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 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())
  • 输出:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 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())
  • 输出

  • ?
  • 1
  • 2
  • i in finally : 2
  • test4Return : 1
  • test3和test4得到的结论:

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 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()
  • 输出

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 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、except、finally 执行顺序详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。

    原文链接:https://blog.csdn.net/u010159842/article/details/54924940

    上一篇下一篇

    猜您喜欢

    热门推荐