擅长:python、mysql、java
<p>这可以简化很多:</p>
<pre><code>>>> a = 1
>>> def foo():
... print a
... a = 3
...
>>> foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'a' referenced before assignment
</code></pre>
<h2>发生什么事了</h2>
<p>当python第一次在函数中看到<code>a</code>时,它是一个非局部变量(在本例中是全局变量)。不过,第二次,因为您要给它赋值,python认为它是一个局部变量,但是这个名称已经被一个全局变量占用了,这导致了错误。在</p>
<p>有几个解决方法可以将<code>a</code>声明为<code>global</code>,这样python就会知道当你说<code>a = 3</code>时,<code>global</code>变量{<cd1>}是3。但就个人而言,我建议您在代码上多做一些修改,这样就不再需要全局变量了。如果您使用<code>global</code>,那么可能有更好的方法重构代码,这样您就不需要它了。在</p>