对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学习之asyncore模块用法实例教程
Sep 29 Python
在Python中使用M2Crypto模块实现AES加密的教程
Apr 08 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
pip安装Python库时遇到的问题及解决方法
Nov 23 Python
python时间日期函数与利用pandas进行时间序列处理详解
Mar 13 Python
对pandas处理json数据的方法详解
Feb 08 Python
Python求均值,方差,标准差的实例
Jun 29 Python
简单了解python的break、continue、pass
Jul 08 Python
详解python列表(list)的使用技巧及高级操作
Aug 15 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
Python排序函数的使用方法详解
Dec 11 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中file_exists函数使用详解
2015/05/08 PHP
一段实用的php验证码函数
2016/05/19 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
2013/01/24 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
基于Vue实现拖拽功能
2020/07/29 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
python不换行之end=与逗号的意思及用途
2017/11/21 Python
python实现控制COM口的示例
2019/07/03 Python
Python如何在DataFrame增加数值
2020/02/14 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
python 怎样进行内存管理
2020/11/10 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
AmazeUI 折叠面板的实现代码
2020/08/17 HTML / CSS
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
简单说说tomcat的配置
2013/05/28 面试题
外贸学院会计专业应届生求职信
2013/11/14 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
倡议书范文
2014/04/16 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
教师节作文之小学四年级
2019/09/03 职场文书