【发布时间】:2020-07-01 14:09:27
【问题描述】:
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块返回? finally 块中的变量是否在 finally 块中的本地范围内?还是 try 块的返回值保存在内存缓冲区中并且不受 finally 块中的赋值影响? 在下面的示例中,为什么输出是 100 而不是 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
【问题讨论】:
-
最终块总是执行 参考:stackoverflow.com/questions/19805654/….
-
finally子句在return之后执行 - 在之前的任何时候它都不知道它应该执行。将return print("returning")放入try块中,您将看到print的输出。如果它碰巧自己做了一个return,它只会替换原始返回值。
标签: python python-3.x