在函数上下文中设置全局变量的值导致UnboundLocalError?
也许今天早上的咖啡不够提神,但这个情况让我有点困惑:
>>> a = 'foo'
>>> def func1():
... print a
...
>>> def func2():
... print a
... a = 'bar'
...
>>> func1()
foo
>>> func2()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in func2
UnboundLocalError: local variable 'a' referenced before assignment
(注意,是func2()
里的print a
语句引发了错误,而不是a = 'bar'
。)
有人能给我解释一下这是怎么回事吗?
1 个回答
2
因为在 func2
这个函数里面给 a
赋值,所以 Python 认为 a
是一个局部变量。你可以在 print
语句之前加上 global a
的声明:
def func2():
global a
print a
a = 'bar'
另外,你可以查看 这个关于 Python 作用域规则的问题。