Python变量范围问题
我的代码如下Python变量范围问题,python,python-2.7,scope,Python,Python 2.7,Scope,我的代码如下 def test(): print num1 print num num += 10 if __name__ == '__main__': num = 0 num1 = 3 test() 在执行上述python代码时,我得到以下输出 3 Traceback (most recent call last): File "<stdin>", line 3, in <module> File "<stdin>"
def test():
print num1
print num
num += 10
if __name__ == '__main__':
num = 0
num1 = 3
test()
在执行上述python代码时,我得到以下输出
3
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "<stdin>", line 2, in test
UnboundLocalError: local variable 'num' referenced before assignment
3
回溯(最近一次呼叫最后一次):
文件“”,第3行,在
文件“”,第2行,在测试中
UnboundLocalError:赋值前引用的局部变量“num”
我不知道为什么在测试方法中不能使用num。这对我来说很奇怪,我以前还没有面对过
注意:我使用的是Python2.7。因为您在
test
函数中赋值给num
,python认为它是一个局部变量。这就是为什么它抱怨您在分配局部变量之前引用了它
您可以通过将num
显式声明为全局来解决此问题:
def test():
global num
print num1
print num
num += 10
if __name__ == '__main__':
num = 0
num1 = 3
test()
num
出现在测试定义内的赋值语句中。这使得num
成为局部变量。由于范围确定是在编译时进行的,num
是一个局部变量,即使在赋值之前的print
语句中也是如此。此时,num
没有值,导致错误。如果要访问全局值,需要将num
声明为全局值num1
没有此问题,因为您从未尝试分配给它
def test():
global num
print num1
print num
num += 10
假设缩进正确,此代码可以工作。请再次检查您是否显示了引发此错误的确切代码,您可能在某个地方有输入错误。@delnan我在上次编辑时使用了num变量。希望它在代码中出错。你能看一下上面的代码吗?可能是重复的,现在很简单。如果您从一开始就包含了正确的代码(甚至只是异常消息),那么您会提前一个小时得到答案;-)酷,你的编辑让我投了反对票,因为我的答案不再有效。