【发布时间】:2016-12-01 16:14:39
【问题描述】:
当我执行时
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()) 之后,它也会引发错误?
【问题讨论】:
-
这里仅供参考,但不要在实际代码中使用
locals()。或globals()。或eval()。或exec(). -
首先在
locals()中搜索字符"x"。第二个函数尝试使用变量x,然后分配给它。如果要使用全局版本,请指定global x。见*.com/questions/370357/python-variable-scope-error -
@TigerhawkT3:谢谢。我只是在尝试学习时使用它。
-
@cdarke: 为什么即使
x = 7出现在第一个print(x, 'x' in locals())之后,它也会引发错误? -
因为有一个编译阶段和一个运行阶段。 Python 的解释方式与 shell 脚本不同。
标签: python