对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读写文件操作示例程序
Dec 02 Python
python使用心得之获得github代码库列表
Jun 25 Python
在Python的框架中为MySQL实现restful接口的教程
Apr 08 Python
Python3读取文件常用方法实例分析
May 22 Python
Django视图和URL配置详解
Jan 31 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
Python实现去除列表中重复元素的方法总结【7种方法】
Feb 16 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
Django对models里的objects的使用详解
Aug 17 Python
在notepad++中实现直接运行python代码
Dec 18 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 Python
Tensorflow中的降维函数tf.reduce_*使用总结
Apr 20 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系统流量分析的程序
2006/10/09 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
简单实现js拖拽效果
2017/07/25 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
AngularJS 监听变量变化的实现方法
2018/10/09 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
在vant 中使用cell组件 定义图标该图片和位置操作
2020/11/02 Javascript
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
Python常见字典内建函数用法示例
2018/05/14 Python
对Python中内置异常层次结构详解
2018/10/18 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
python和php哪个更适合写爬虫
2020/06/22 Python
幼儿园长自我鉴定
2013/10/17 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
三查三看党性分析材料
2014/02/18 职场文书
我的理想演讲稿
2014/04/30 职场文书
出生医学证明书
2014/09/15 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
热爱劳动主题班会
2015/08/14 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
Python3 如何开启自带http服务
2021/05/18 Python
Javascript webpack动态import
2022/04/19 Javascript
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL