对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 FTP操作类代码分享
May 13 Python
Python素数检测的方法
May 11 Python
浅谈Python黑帽子取代netcat
Feb 10 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
Python进阶之全面解读高级特性之切片
Feb 19 Python
Flask框架模板继承实现方法分析
Jul 31 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
logging level级别介绍
Feb 21 Python
Python网络爬虫信息提取mooc代码实例
Mar 06 Python
基于python+selenium自动健康打卡的实现代码
Jan 13 Python
发工资啦!教你用Python实现邮箱自动群发工资条
May 10 Python
Python使用MapReduce进行简单的销售统计
Apr 22 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获取windows登录用户名的方法
2014/06/24 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
javascript 伪数组实现方法
2010/10/11 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python编写百度贴吧的简单爬虫
2015/04/02 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
Pandas之MultiIndex对象的示例详解
2019/06/25 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
酒店大堂副理的职责范文
2014/02/13 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
设计专业自荐信
2014/06/19 职场文书
女方离婚起诉书
2015/05/18 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
python实现简单区块链结构
2021/04/25 Python
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers