这是我的一段代码:
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] 删除。
我来说两句