对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中用startswith()函数判断字符串开头的教程
Apr 07 Python
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 Python
Python中py文件引用另一个py文件变量的方法
Apr 29 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
Python实现二维曲线拟合的方法
Dec 29 Python
Pandas读取并修改excel的示例代码
Feb 17 Python
pytest中文文档之编写断言
Sep 12 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
Nov 29 Python
python add_argument()用法解析
Jan 29 Python
python数据预处理 :数据抽样解析
Feb 24 Python
Python开发入门——迭代的基本使用
Sep 03 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 array_map()数组函数使用说明
2011/07/12 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
JavaScript 图像动画的小demo
2012/05/23 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
python实现扫描日志关键字的示例
2018/04/28 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
Python多线程多进程实例对比解析
2020/03/12 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
2017/08/15 HTML / CSS
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
应届毕业生个人自荐信范文
2013/11/30 职场文书
检察官就职演讲稿
2014/01/13 职场文书
秋季运动会表扬稿
2014/01/16 职场文书
个人综合鉴定材料
2014/05/23 职场文书
2014第二批党的群众路线教育实践活动对照检查材料思想汇报
2014/09/18 职场文书
个人委托书范本汇总
2014/10/01 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
2014年项目工作总结
2014/11/24 职场文书
谢师宴邀请函
2015/02/02 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
python3实现常见的排序算法(示例代码)
2021/07/04 Python