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

为何出现UnboundLocalError?如何优化嵌套函数代码?

UnboundLocalError错误原因及优化方案

错误原因

在嵌套函数b()里执行t+=1时,Python会默认t是b()的局部变量,但t并没有在b()内部提前定义就直接做自增操作;而外部函数a()中的t属于外层作用域,不通过专门声明的话,内层函数无法直接修改这个外层变量,所以触发了"局部变量在赋值前被引用"的错误。

优化实现方式

方式1:用nonlocal关键字(Python3+推荐)

明确告知Python,t是来自外层嵌套作用域的变量,而非当前函数的局部变量:

def a():
    t = 0
    def b():
        nonlocal t
        t += 1
        return
    b()
    print(t)
a()

运行后输出1,符合预期。

方式2:借助可变对象间接修改

可变对象(比如列表)的内部元素修改不会触发局部变量判定,外层的列表可以被内层函数直接修改:

def a():
    t = [0]
    def b():
        t[0] += 1
        return
    b()
    print(t[0])
a()

方式3:通过返回值更新变量

让内层函数返回修改后的值,外层函数接收后重新赋值:

def a():
    t = 0
    def b(val):
        return val + 1
    t = b(t)
    print(t)
a()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:50:29