python - try-finally中的1个坑
天蓬老师
天蓬老师 2017-04-17 15:00:13
0
3
381

在编写高质量代码-改善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)
Peter_Zhu

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

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

迷茫

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

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


>>> test()
666
777
1

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

小葫芦

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!