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

Python函数内重新赋值变量触发UnboundLocalError的解决方法

解决UnboundLocalError:在函数内修改全局变量的方法

你遇到的UnboundLocalError是Python作用域规则导致的:当你在函数foo里给delay赋值(delay=0)时,Python会自动把delay标记为局部变量,但你在赋值前先判断了delay>100,这时候局部的delay还未定义,所以抛出了错误。

下面给你几种可行的解决方法,让你能在函数内完成变量重赋值:

方法1:用global关键字声明全局变量

这是最直接的方式,明确告诉Python函数内的delay引用的是全局作用域中的变量:

delay = 0

def foo():
    global delay  # 声明delay为全局变量
    if delay > 100:
        delay = 0
        print('100th time')

while 1:
    delay = delay + 1
    print(delay)
    foo()

方法2:用可变容器包装变量

如果你不想用global关键字,可以把变量放在列表、字典这类可变容器里,因为函数内修改容器的元素不会触发局部变量的绑定:

delay = [0]  # 用列表包装全局变量

def foo():
    if delay[0] > 100:
        delay[0] = 0
        print('100th time')

while 1:
    delay[0] += 1
    print(delay[0])
    foo()

额外建议:封装为类(适合更复杂的场景)

如果你的逻辑后续会扩展,把状态(比如delay)封装成类的属性会更优雅,避免全局变量的副作用:

class Counter:
    def __init__(self):
        self.delay = 0

    def check_and_reset(self):
        if self.delay > 100:
            self.delay = 0
            print('100th time')

counter = Counter()
while 1:
    counter.delay += 1
    print(counter.delay)
    counter.check_and_reset()

这几种方法都能解决你的问题,根据你的场景选择最适合的即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:20:02