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

Python子例程修改全局score变量异常 无类场景修复咨询

问题根因

这是Python作用域规则导致的典型报错:函数内部如果存在对变量名的直接赋值操作,Python会默认将该变量判定为函数局部变量,不会向外层全局作用域查找同名变量。原代码执行score = score + 1时,解释器会尝试读取尚未赋值的局部变量score,直接抛出UnboundLocalError。
将score = 0移入函数内部的思路不成立,因为每次触发函数都会重新执行赋值,计数会被持续重置为0,无法实现累加。

修复方法

方案1:通过global关键字声明引用全局变量(改造成本最低)

在函数内用global关键字明确指定score引用全局作用域的变量,即可正常修改全局计数,完全适配现有代码结构:

score = 0

def on_button_pressed_a():
    global score
    score = score + 1
    print(score)
input.on_button_pressed(Button.A, on_button_pressed_a)

方案2:借助可变对象存储计数(无需使用global)

如果不想用全局变量声明,可以把计数值存在列表、字典这类可变容器中。修改可变对象内部元素时,不需要对变量名本身重新赋值,不会触发局部变量判定:

# 用单元素列表存储计数,列表为可变类型
score = [0]

def on_button_pressed_a():
    score[0] += 1
    print(score[0])
input.on_button_pressed(Button.A, on_button_pressed_a)

两种方案均不需要借助类实现,满足要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:21:31