对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 相关文章推荐
总结用Pdb库调试Python的方式及常用的命令
Aug 18 Python
分享Python开发中要注意的十个小贴士
Aug 30 Python
利用python在excel里面直接使用sql函数的方法
Feb 08 Python
python使用KNN算法识别手写数字
Apr 25 Python
Python循环中else,break和continue的用法实例详解
Jul 11 Python
python文档字符串(函数使用说明)使用详解
Jul 30 Python
python conda操作方法
Sep 11 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
TensorFlow查看输入节点和输出节点名称方式
Jan 04 Python
OpenCV 之按位运算举例解析
Jun 19 Python
获取python运行输出的数据并解析存为dataFrame实例
Jul 07 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
三个类概括PHP的五种设计模式
2012/09/05 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
PHP的几个常用加密函数
2016/02/03 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
JS实现div居中示例
2014/04/17 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
2017/02/18 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
python的re模块应用实例
2014/09/26 Python
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
在Django的通用视图中处理Context的方法
2015/07/21 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
python 实现简易的记事本
2020/11/30 Python
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
户籍证明书标准模板
2014/09/10 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
党支部工作总结2015
2015/04/01 职场文书
党内外群众意见范文
2015/06/02 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
SpringBoot 集成Redis 过程
2021/06/02 Redis
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android
JavaScript实现音乐播放器
2022/08/14 Javascript