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


Posted in Python onFebruary 18, 2019

如下所示:

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 stuff
process except
to return in except
to return in finally
test1Return : 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 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语句

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 : 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())

输出

i in finally : 2
test4Return : 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 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 执行顺序详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
从Python程序中访问Java类的简单示例
Apr 20 Python
Python的Django中django-userena组件的简单使用教程
May 30 Python
Python内置函数OCT详解
Nov 09 Python
django 发送邮件和缓存的实现代码
Jul 18 Python
解决python 无法加载downsample模型的问题
Oct 25 Python
Python2.7实现多进程下开发多线程示例
May 31 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
Jun 14 Python
python 函数中的内置函数及用法详解
Jul 02 Python
Python中list的交、并、差集获取方法示例
Aug 01 Python
python3正则模块re的使用方法详解
Feb 11 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
python调用matlab的m自定义函数方法
Feb 18 #Python
在Python文件中指定Python解释器的方法
Feb 18 #Python
Python字符串逆序的实现方法【一题多解】
Feb 18 #Python
浅谈pyqt5中信号与槽的认识
Feb 17 #Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 #Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
Feb 17 #Python
Python线程之定位与销毁的实现
Feb 17 #Python
You might like
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
php-app开发接口加密详解
2018/04/18 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
浅谈Vue.js
2017/03/02 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
Python实现网站文件的全备份和差异备份
2014/11/30 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
python K近邻算法的kd树实现
2018/09/06 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
Python绘制动态水球图过程详解
2020/06/03 Python
python递归函数用法详解
2020/10/26 Python
自主招生自荐信范文
2013/12/04 职场文书
手机促销活动方案
2014/02/05 职场文书
家长写给老师的建议书
2014/03/13 职场文书
给老师的一封建议书
2014/03/13 职场文书
探亲假请假条
2014/04/11 职场文书
体育教师求职信
2014/05/24 职场文书
年度评优评先方案
2014/06/03 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
2014年生产部工作总结
2014/12/17 职场文书
教你快速开启Apache SkyWalking的自监控
2021/04/25 Servers