对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实现strcmp函数功能示例
Mar 25 Python
Python日志模块logging简介
Apr 13 Python
在Python中操作字符串之rstrip()方法的使用
May 19 Python
100行python代码实现跳一跳辅助程序
Jan 15 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
Nov 01 Python
Pytorch之view及view_as使用详解
Dec 31 Python
python实现翻译word表格小程序
Feb 27 Python
Python range与enumerate函数区别解析
Feb 28 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
django模板获取list中指定索引的值方式
May 14 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 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分页示例代码
2007/03/19 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python匹配中文的正则表达式
2016/05/11 Python
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
python多进程间通信代码实例
2019/09/30 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
学习委员自我鉴定
2014/01/13 职场文书
优秀护士先进事迹
2014/05/08 职场文书
关爱老人标语
2014/06/21 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python