对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中处理字符串之isalpha()方法的使用
May 18 Python
Python查询IP地址归属完整代码
Jun 21 Python
Python网络编程使用select实现socket全双工异步通信功能示例
Apr 09 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
在python中以相同顺序shuffle两个list的方法
Dec 13 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
Python几种常见算法汇总
Jun 02 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 Python
Python之qq自动发消息的示例代码
Feb 18 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
深入file_get_contents与curl函数的详解
2013/06/25 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
Laravel 5 学习笔记
2015/03/06 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
详解Vue路由自动注入实践
2019/04/17 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
python使用range函数计算一组数和的方法
2015/05/07 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
详解python之heapq模块及排序操作
2019/04/04 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
高中竞选班长演讲稿
2014/04/24 职场文书
竞选团支书演讲稿
2014/04/28 职场文书
选秀节目策划方案
2014/06/06 职场文书
学习型党组织心得体会
2014/09/12 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
网站文案策划岗位职责
2015/04/14 职场文书
酒店宣传语大全
2015/07/13 职场文书
体育教师研修感悟
2015/11/18 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书