对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 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
python进阶教程之动态类型详解
Aug 30 Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 Python
基于MTCNN/TensorFlow实现人脸检测
May 24 Python
Python 字符串换行的多种方式
Sep 06 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
Jul 19 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
pytorch 归一化与反归一化实例
Dec 31 Python
Python流程控制语句的深入讲解
Jun 15 Python
python实现单机五子棋
Aug 28 Python
Pycharm常用快捷键总结及配置方法
Nov 14 Python
Python基于unittest实现测试用例执行
Nov 25 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
MYSQL环境变量设置方法
2007/01/15 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
js获取变量
2006/08/24 Javascript
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
关于在mongoose中填充外键的方法详解
2017/08/14 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
python3简单实现微信爬虫
2015/04/09 Python
python实现百度语音识别api
2018/04/10 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
最小二乘法及其python实现详解
2020/02/24 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
python re.match()用法相关示例
2021/01/27 Python
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
白色公司:The White Company
2017/10/11 全球购物
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
应聘收银员个人的求职信
2013/11/30 职场文书
护理学专业推荐信
2013/12/03 职场文书
植树节活动总结
2014/04/30 职场文书
新农村建设典型材料
2014/05/31 职场文书
企业法人代表任命书
2014/06/06 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
社区党建工作总结2015
2015/05/13 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
java项目构建Gradle的使用教程
2022/03/24 Java/Android