对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文件操作之合并文本文件内容示例代码
Sep 19 Python
python 读入多行数据的实例
Apr 19 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
python实现邮件发送功能
Aug 10 Python
Python对wav文件的重采样实例
Feb 25 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 Python
python使用布隆过滤器的实现示例
Aug 20 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 Python
如何基于pandas读取csv后合并两个股票
Sep 25 Python
pycharm + django跨域无提示的解决方法
Dec 06 Python
python实现语音常用度量方法的代码详解
May 25 Python
Python Django获取URL中的数据详解
Nov 01 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分页函数
2006/07/08 PHP
Oracle 常见问题解答
2006/10/09 PHP
一个简单的js动画效果代码
2010/07/20 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
Python get获取页面cookie代码实例
2018/09/12 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
python实现图片识别汽车功能
2018/11/30 Python
python读取各种文件数据方法解析
2018/12/29 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
一些Solaris面试题
2013/03/22 面试题
销售文员岗位职责
2013/11/29 职场文书
中国文明网签名寄语
2014/01/18 职场文书
开学典礼感言
2014/02/16 职场文书
商场促销活动策划方案
2014/08/18 职场文书
教师节活动总结
2014/08/29 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
实习科室评语
2015/01/04 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL