You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python嵌套函数报local variable referenced before assignment错误原因求助

报错原因

该问题由Python的作用域判定规则和变量操作类型差异导致:

  • 你在isValid外层函数中定义的top是不可变的整数类型,内层push函数内执行的top += 1本质是top = top + 1,属于对top变量本身的赋值操作。Python遇到这种情况时,会默认将top判定为push函数的局部变量,因此print(top)语句执行时,局部的top还未完成赋值,就会抛出local variable referenced before assignment错误。
  • 而stack是可变的列表类型,你在push函数内仅修改了stack的内部元素,没有对stack变量本身做重新赋值操作,Python不会将其判定为局部变量,会按照LEGB规则向外层作用域查找,最终找到外层定义的stack,因此可以正常引用。

修复方案

如果需要在内层函数修改外层函数的不可变变量,使用nonlocal关键字声明该变量来自外层作用域即可,修改后的push函数示例:

def push(x):
    nonlocal top # 声明top来自外层函数作用域
    print(top)
    top += 1
    stack[top] = x

额外提示:你的代码还有两处小问题可同步修复:1. push定义时要求传入参数x,调用push()时未传参;2. isValid函数未定义返回值,调用print(isValid())会输出None。

内容的提问来源于stack exchange,提问作者Edward Snowden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:24:01