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
相关产品推荐
相关产品推荐

