当我执行为什么我在第二个代码中得到UnboundLocalError,但不是在第一个代码中?
x = 0
def f():
print('x' in locals())
x = 1
print('x' in locals())
f()
我得到了我希望,即
False
True
然而,当我执行
x = 3
def f():
print(x, 'x' in locals())
x = 7
print(x, 'x' in locals())
f()
我希望得到
3 False
7 True
但相反,我得到了UnboundLocalError
。
如果Python知道在下一行有本地作用域中标签x
的分配(因此名称x
已经在本地作用域中,但它尚未分配),那么为什么它会让我在我的第一个代码中询问x
?
新增:
为什么会引发错误,即使x = 7
来自第一print(x, 'x' in locals())
后?
只是在FYI这里,但不要在实际代码中使用'locals()'。或'globals()'。或'eval()'。或'exec()'。 – TigerhawkT3
第一次搜索'locals()'中的字符'“x”'。第二个函数试图使用变量'x'然后赋值给它。如果您想使用全局版本,请指定'global x'。见http://stackoverflow.com/questions/370357/python-variable-scope-error – cdarke
@ TigerhawkT3:谢谢。我只是在尝试学习时使用它。 – Leo