python finally语句里面出现异常,python finally 出错咋办
本文主要介绍Python异常语法的另一个成员——finally,通过学习finally可以帮助我们更好的处理异常。来和边肖一起学习吧。
目录
finally的作用和用法finally的实例案例finally的触发必然性和优先性try语法伴随着except或finally的必然性finally的历史今天,我们来了解一下另一个异常语法成员——finally;学习最终可以帮助我们更好地处理异常。
finally 的功能与用法
finally的作用:finally表示最后的意思,是最后执行的代码块配合异常语法。
无论是否出现异常,finally的代码块都会被执行。
在函数中,即使在try或except中返回,finally代码块仍将被执行。
Try语法应至少伴随except或finally之一。
finally:的用法举例如下
尝试:
代码块1
除了:
代码块2
最后:
代码块3
finally 示例案例
定义测试():
尝试:
1/0
e:除外
打印(e)
最后:
打印(“一般异常捕获已完成”)
结果=测试()
打印(结果)
#执行结果如下:
#被零除
#一般异常捕获已完成。
finally 触发的必然性与优先级
接下来,我们来看看《尝试或例外》中出现退货的场景:
定义测试():
尝试:
1/0
e:除外
返回e
最后:
打印(“一般异常捕获已完成”)
结果=测试()
打印(结果)
#执行结果如下:
#一般异常捕获已完成。
#被零除
我们发现问题了吗?首先输出finally代码块,然后输出except代码块。
Python程序是从上到下执行的。为什么会有这样的结果?我试图在代码块中添加一行输出测试代码,除了看看执行顺序是什么。
定义测试():
尝试:
1/0
e:除外
打印(“异常——测试”)
返回e
最后:
打印(“一般异常捕获已完成”)
结果=测试()
打印(结果)
#执行结果如下:
# exception——test测试
#一般异常捕获已完成。
#被零除
从执行结果可以得出结论,程序仍然是自顶向下执行的。其实造成这个结果的原因是,在异常被捕获后,异常信息会被赋给变量E进行返回,调用test()时返回值会被赋给结果。所以打印时能得到的结果是先输出finally代码块,再输出result的赋值结果。
同时也印证了我们上面对finally函数的描述:finally的代码块在try或者except中返回后仍然会被执行。
现在我们已经确认了代码块except,那么代码块try呢?
">def test():
try:
print(try_test)
return try
except Exception as e:
print(e)
finally:
print(通用异常捕获已完成)
result = test()
print(result)
# >>> 执行结果如下:
# >>> try_test
# >>> 通用异常捕获已完成
# >>> try
# >>> 得出了同样的 finally 必然触发性 的结论
再思考一个问题,之前我们的 finally 的代码块 都是输出的 print 语句,如果我们在 try 或 except 与 finally 的代码块 中都使用 return ,那么会返回谁的 return 的结果呢?
def test():
从执行结果我们看到, except 与 finally 的代码块 中都使用 return ,同时我们也知道会先触发 except 代码块的 return ,但是最终返回的依然是 finally 的代码块 中都使用 return。
虽然 except 代码块有 return ,但是因为 finally 的代码块 中也使用了 return ,所以我们的程序最终还是选择了 finally 的代码块 中的 return 进行返回。最终得出 finally 的代码块 中的 return 返回的级别更高的结论。
try 语法 伴随 except 或 finally 的必然性
我们看下面的一个小例子
def test():
可以看到,虽然产生了报错,但是我们的 finally 代码块依然被执行了。让我们试试在这种情况下,直接使用 return 会怎么样?
def test():
此时我们发现, finally 代码块依然被执行了,不仅如此,刚刚出现的错误也被忽略了。说明当 try 出现异常的时候会被直接忽略,直接跳转到 finally 的代码块。
这就是 try 与 finally 的组合效果,不过在我们平时的工作中,还是希望 使用 try 配合 except 将 异常类型(信息) 友好的打印出来,再进行return 会更好。
finally 的历史
在 python 2.5 版本之前, finally 需要独立使用不可以和 try 进行配合,在 python 2.5 版本 之后才演变成了现在这个样子。
如果未来有机会使用较老版本的 python ,看到这样的情况,不要觉得奇怪。
到此这篇关于Python学习之异常中的finally使用详解的文章就介绍到这了,更多相关Python异常 finally内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。