擅长:python、mysql、java
<p>仅当<code>input()</code>或<code>int()</code>成功时才设置<code>guess_num</code>。如果其中任何一个抛出异常,Python<em>就没有要分配给<code>guess_num</code></em>的值</p>
<p>然而,您真正的错误是使用递归。处理异常时,再次调用<code>main()</code>。最后,<code>main()</code><strong>返回</strong>,代码从调用<code>main()</code>的地方继续。对<code>main()</code>的每个递归调用都有自己的局部变量集,因此<code>main()</code>返回时,所有成功运行的<code>main()</code>都会带着它们的局部变量一起消失。即使在其中一个递归调用中设置了<code>guess_num</code>,它也无法生存在父函数运行中</p>
<p>所以真正发生的是:</p>
<ol>
<li>输入非整数值,将引发异常</li>
<li>您调用了<code>main()</code>,这次成功地运行了代码</李>
<li><code>main()</code>返回,现在您尝试访问局部变量<code>guess_num</code>,但从未设置过</李>
</ol>
<p>不要使用递归。使用循环。或者,如果必须使用递归,请使用<code>return main()</code>,这样一旦对<code>main()</code>的递归调用结束,函数就会退出</p>