Finally块在try块中的return语句之前运行,如下例所示-返回False
而不是True
:
>>> def bool_return():
... try:
... return True
... finally:
... return False
...
>>> bool_return()
False
类似地,以下代码返回Finally块中设置的值:
>>> def num_return():
... try:
... x=100
... return x
... finally:
... x=90
... return x
...
>>> num_return()
90
然而,对于finally块中没有return语句的变量赋值,为什么finally块更新的变量值不会被try块返回?Is the variable from finally block scoped locally in the finally block? Or is the return value from the try block held in memory buffer and unaffected by assignment in finally block?在下面的例子中,为什么输出是Is the variable from finally block scoped locally in the finally block? Or is the return value from the try block held in memory buffer and unaffected by assignment in finally block?而不是90?
>>> def num_return():
... try:
... x=100
... return x
... finally:
... x=90
...
>>> num_return()
100
类似地,下面的例子:
In [1]: def num_return():
...: try:
...: x=[100]
...: return x
...: finally:
...: x[0] = 90
...:
In [2]: num_return()
Out[2]: [90]
In [3]: def num_return():
...: try:
...: x=[100]
...: return x[0]
...: finally:
...: x[0] = 90
...:
In [4]: num_return()
Out[4]: 100