我的代码如下所示。
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
我不知道为什么测试方法中没有特别的数字。对我来说这很奇怪,我之前还没有面对过这个。
注意:我使用的是python 2.7。
答案 0 :(得分:1)
由于您在num
函数内分配test
,因此python将其视为局部变量。这就是为什么它会在分配之前抱怨你引用局部变量。
您可以通过明确声明num
为全局来解决此问题:
def test():
global num
print num1
print num
num += 10
if __name__ == '__main__':
num = 0
num1 = 3
test()
答案 1 :(得分:1)
num
出现在test
定义内的赋值语句中。这使num
成为局部变量。由于范围确定是在编译时进行的,因此即使在赋值之前的num
语句中,print
也是一个局部变量。那时,num
没有值,导致错误。如果要访问全局值,则需要将num
声明为全局值。 num1
没有此问题,因为您永远不会尝试分配它。
def test():
global num
print num1
print num
num += 10