Python与try-except-finally中的返回值混淆

Fed_Dragon

这是我的一段代码:

def main():
    num = 0
    try:
        raise Exception('This is the error message.')
    except Exception:
        num += 1
        return num
    finally:
        num += 1

a = main()
print(a)

返回值是1而不是2,这对我来说没有多大意义。

我认为它会返回 2,因为 finally 应该在返回值之前执行。

有人可以帮助我理解这一点吗?

帕特里克·豪

您遇到了标识符和值之间的区别。num += 1正在创建一个新int对象并分配num标识符以指向它。它不会更改int标识符已经指向的对象。(对于小值,int对象被缓存,但这是一个实现细节)

您可以在以下代码中看到与确实改变对象的操作的区别:

def y():
    l = []
    try:
        raise Exception
    except Exception:
        print("except")
        l.append(1)
        return l
    finally:
        print("finally")
        l.append(2)

print(y())
# except
# finally
# [1, 2]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章