对python中的try、except、finally 执行顺序详解
作者:mishidemudong 时间:2021-07-19 04:08:14
如下所示:
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执行,执行完毕之后才开始下一轮循环
来源:https://blog.csdn.net/u010159842/article/details/54924940
标签:python,try,except,finally
0
投稿
猜你喜欢
php对数字进行万、亿单位的转化
2023-06-24 08:34:32
Python数据结构之顺序表的实现代码示例
2021-02-22 07:13:08
浅谈python迭代器
2023-07-21 21:56:47
使用keras时input_shape的维度表示问题说明
2023-05-10 02:52:25
如何利用python正确地为图像添加高斯噪声
2023-08-03 08:26:22
Python机器学习NLP自然语言处理基本操作关键词
2023-11-09 05:51:31
Python super( )函数用法总结
2022-07-09 23:23:10
基于python2.7实现图形密码生成器的实例代码
2021-01-21 15:20:50
django的ORM模型的实现原理
2022-08-26 00:57:33
python的绘图工具matplotlib使用实例
2023-10-09 13:23:28
python matplotlib绘画十一种常见数据分析图
2022-09-02 04:50:41
15款最佳jQuery LightBox插件
2010-09-25 12:41:00
Python+Opencv实战之人脸追踪详解
2022-09-22 16:03:38
Python如何筛选序列中的元素的方法实现
2021-06-12 03:31:51
Python利用机器学习算法实现垃圾邮件的识别
2021-02-24 04:31:04
pandas 根据列的值选取所有行的示例
2023-10-13 16:19:38
JavaScript获取事件对象的注意点
2009-07-29 18:36:00
Python跳出循环语句continue与break的区别
2023-10-19 11:04:19
python对json的相关操作实例详解
2022-03-27 20:15:06
Python使用shutil操作文件、subprocess运行子程序
2021-03-01 00:19:19