为了账号安全,请及时绑定邮箱和手机立即绑定

try-finally中的1个坑

try-finally中的1个坑

开满天机 2019-02-21 21:04:33
在编写高质量代码-改善python程序的91个建议中有一个关于try-finally的一个问题如下: def ReturnTest(a): try: if a <= 0: raise ValueError('data can not be negative') else: return a except ValueError as e: print(e) finally: print('the end') return -1 ReturnTest(0) ReturnTest(2) 给入参数为0时,输出结果可以解释通,输入参数为2时,就想不通了,书中解释说是在执行return a之前会先执行finally代码块,这是为何?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

这是预期行为:不管发生什么,finally 块总是会执行,即使你 return 也一样。

PS: 这本书好像是我读了开头就因为觉得质量太差而读不下去的那本呢。

查看完整回答
反对 回复 2019-03-01
?
当年话下

TA贡献1890条经验 获得超9个赞

try-except里面,当执行到try块中return语句的时候,会自动跳转到finally块中执行,当finally中的执行完后,再进入try中执行return, 为此,我做了个测试:

def test():
    try:
        print(666)
        return 1
    finally:
        print(777)


>>> test()
666
777
1

从输出结果能看出刚刚的结论

查看完整回答
反对 回复 2019-03-01
?
森林海

TA贡献2011条经验 获得超2个赞

这和java是一样的,finally加上它,就是必须要做的!

这不是坑,而且语言的设计,这是语法规则,就好像python要求缩进一样。

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 503 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信