在函数上下文中设置全局变量的值导致UnboundLocalError?

1 投票
1 回答
1288 浏览
提问于 2025-04-16 13:58

也许今天早上的咖啡不够提神,但这个情况让我有点困惑:

>>> 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 作用域规则的问题

撰写回答