对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程序与C程序的结合使用
Apr 07 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
Jun 02 Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
python使用正则筛选信用卡
Jan 27 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
Apr 11 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
python 实现任务管理清单案例
Apr 25 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
python开发入门——set的使用
Sep 03 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
Feb 25 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
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
使用PHP下载CSS文件中的图片的代码
2013/09/24 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
2016/05/26 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
d3绘制基本的柱形图的实现代码
2018/12/12 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
JS实现分页导航效果
2020/02/19 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
python中时间模块的基本使用教程
2019/05/14 Python
python实现倒计时小工具
2019/07/29 Python
pandas数据处理进阶详解
2019/10/11 Python
基于python实现学生信息管理系统
2019/11/22 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
高中数学教学反思
2014/01/30 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
求职信名称怎么写
2014/05/26 职场文书
诚信贷款承诺书
2014/05/30 职场文书
邀请函格式范文
2015/02/02 职场文书
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android