对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 getopt 参数处理小示例
Jun 09 Python
Python字符串、元组、列表、字典互相转换的方法
Jan 23 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
Apr 22 Python
python2爬取百度贴吧指定关键字和图片代码实例
Aug 14 Python
tensorflow 只恢复部分模型参数的实例
Jan 06 Python
django中related_name的用法说明
May 20 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
Jun 02 Python
python字典的值可以修改吗
Jun 29 Python
Django返回HTML文件的实现方法
Sep 17 Python
Python的Tqdm模块实现进度条配置
Feb 24 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
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
php中++i 与 i++ 的区别
2012/08/08 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
vue父子模板传值问题解决方法案例分析
2020/02/26 Javascript
详解vue v-model
2020/08/31 Javascript
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
python模糊图片过滤的方法
2018/12/14 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
最新销售员个人自荐信
2013/09/21 职场文书
财务会计专业毕业生自荐信
2013/10/02 职场文书
cf收人广告词大全
2014/03/14 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
唐山大地震观后感
2015/06/05 职场文书
python常见的占位符总结及用法
2021/07/02 Python
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang