对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分割TXT文件成4K的TXT文件
May 23 Python
python抓取网页中图片并保存到本地
Dec 01 Python
Python常用库推荐
Dec 04 Python
K-近邻算法的python实现代码分享
Dec 09 Python
python删除文本中行数标签的方法
May 31 Python
python字符串常用方法
Jun 14 Python
使用Python微信库itchat获得好友和群组已撤回的消息
Jun 24 Python
对Python函数设计规范详解
Jul 19 Python
Python中logger日志模块详解
Aug 04 Python
Python Request类源码实现方法及原理解析
Aug 17 Python
如何利用Python 进行边缘检测
Oct 14 Python
PyCharm常用配置和常用插件(小结)
Feb 06 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
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
Js实现粘贴上传图片的原理及示例
2020/12/09 Javascript
python flask实现分页效果
2017/06/27 Python
python加载自定义词典实例
2019/12/06 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
Django 再谈一谈json序列化
2020/03/16 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
如何高效率的查找一个月以内的数据
2012/04/15 面试题
介绍一下Java中的static关键字
2012/05/12 面试题
艺术爱好者的自我评价分享
2013/10/08 职场文书
房屋转让协议书
2014/04/11 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
基于Redis的List实现特价商品列表功能
2021/08/30 Redis
javascript的var与let,const之间的区别详解
2022/02/18 Javascript
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏
Python编写冷笑话生成器
2022/04/20 Python