在函数上下文中设置全局变量的值会引发UnboundLocalError?

时间:2011-03-18 16:23:44

标签: python

今天早上我的咖啡可能还不够强,但这种行为现在让我感到困惑:

>>> 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

(请注意,print a语句会引发func2()中的错误,而非a = 'bar'

有人可以向我解释这里发生了什么吗?

1 个答案:

答案 0 :(得分:2)

因为在a中设置了func2,所以Python认为它是一个局部变量。在global a语句前添加print声明:

def func2():
    global a
    print a
    a = 'bar'

另见this question about Python scoping rules