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

Python中nonlocal关键字在二叉搜索树验证代码中报错的原因

问题原因分析

你的第一段代码出现nonlocal语法错误的核心原因是在嵌套函数的局部代码块内重复声明了nonlocal变量,违反了Python的语法规则:

具体错误点

在find函数中,你已经在函数开头声明了nonlocal bst,但之后又在if条件块内再次使用nonlocal bst声明:

def find(cur):
    nonlocal bst  # 第一次声明,符合规则
    ...
    if l>cur.val:
        nonlocal bst  # 错误:在局部代码块内重复声明nonlocal
        bst=0
        return
    if r<cur.val:
        nonlocal bst  # 同样错误:重复声明
        bst=0
        print(bst)
        return

Python规定,nonlocal声明必须放在嵌套函数作用域的最顶部,不能在if、for等局部代码块内再次声明同一变量。

对比第二段代码的正确写法

第二段代码中,nonlocal d仅在嵌套函数fun的开头声明了一次,没有在代码块内重复声明,完全符合语法规则,因此可以正常运行:

def gen():
    d=56
    def fun():
        nonlocal d  # 仅在函数开头声明一次
        d=70
        return
    fun()
    print(d)

额外提示

你的验证二叉搜索树代码还有其他逻辑问题(比如当节点左子树为空时,max(left(cur.left,[]))会因空列表报错),但当前的语法错误仅来自重复的nonlocal声明,去掉条件块内的nonlocal bst语句即可解决这个语法问题。

内容的提问来源于stack exchange,提问作者Anusha Yerram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:15:55