对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生成数字图片代码分享
Oct 31 Python
python3实现域名查询和whois查询功能
Jun 21 Python
python三大神器之fabric使用教程
Jun 10 Python
Python使用matplotlib 模块scatter方法画散点图示例
Sep 27 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
Python自动重新加载模块详解(autoreload module)
Apr 01 Python
python 星号(*)的多种用途
Sep 21 Python
利用django创建一个简易的博客网站的示例
Sep 29 Python
Python实例教程之检索输出月份日历表
Dec 16 Python
python中的时区问题
Jan 14 Python
python 进阶学习之python装饰器小结
Sep 04 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函数scandir排除特定目录
2014/06/12 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
javascript 动态生成私有变量访问器
2009/12/06 Javascript
ExtJS的拖拽效果示例
2013/12/09 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
深入了解javascript 数组的sort方法
2018/06/01 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
python中实现k-means聚类算法详解
2017/11/11 Python
Python中请不要再用re.compile了
2019/06/30 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
Pytorch中.new()的作用详解
2020/02/18 Python
基于Python fminunc 的替代方法
2020/02/29 Python
Python内置函数locals和globals对比
2020/04/28 Python
python主要用于哪些方向
2020/07/05 Python
python代码能做成软件吗
2020/07/24 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
python多线程和多进程关系详解
2020/12/14 Python
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
中专生自我鉴定
2013/12/17 职场文书
毕业证丢失证明
2014/01/15 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
关于保护环境的建议书
2014/08/26 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
公开致歉信
2019/06/24 职场文书
Python基础之操作MySQL数据库
2021/05/06 Python