擅长:python、mysql、java
<p>你应该学会在不丢失错误的情况下删去代码的一部分并简化它。这样你就能把错误搞定。在</p>
<p>最终您将得到这样的代码:</p>
<pre><code>status = 0
def f():
print(status)
f()
Out: 0
</code></pre>
<p>正如预期的那样,函数找不到<code>status</code>,因此它在全局范围内查找,找到并打印它。在</p>
^{pr2}$
<p>又如所料。我们已经为<code>f</code>定义了一个局部变量<code>status</code>,因此<code>f</code>在打印时就使用它。在</p>
<pre><code>status = 0
def f():
print(status)
status = 1
f()
UnboundLocalError: local variable 'status' referenced before assignment
</code></pre>
<p>现在很清楚为什么会有错误。与第二个示例的唯一区别是,我们交换了顺序,以便只有在<code>print</code>中使用<code>status</code>才在<code>f</code>中定义{<cd1>},与第一个示例的唯一区别是我们在<code>f</code>中定义了<code>status</code>。所以这就是问题所在:当我们在函数内部定义变量时——在函数内部的任何地方——Python决定该变量必须是函数的局部变量。所以当它命中<code>print</code>函数时,它会寻找一个局部变量<code>status</code>,但它还没有被定义。因此出现了错误。类似于运行以下代码:</p>
<pre><code>print(status)
status = 1
NameError: name 'status' is not defined
</code></pre>