Python已在顶部声明变量仍出现局部变量赋值前引用错误如何解决
错误原因说明
Python的变量作用域规则中:如果在函数内部尝试给某个变量赋值,Python会默认将该变量识别为当前函数的局部变量,忽略外层同名的全局变量。
你在on_mouse_down函数内执行score = score + 1时,Python判定score是该函数的局部变量,但赋值语句右侧引用的score还没有在函数内完成初始化,因此抛出UnboundLocalError错误。
修复方法
这里提供两种常用的可行方案:
方案1:使用global关键字声明全局变量
在修改全局变量的函数开头,用global关键字明确声明你要操作的是全局作用域的score变量,修改后的on_mouse_down函数代码如下:
def on_mouse_down(pos): global score # 新增这行声明 if apple.collidepoint(pos): score = score + 1 print(score) place_apple() else : print("You missed!")
方案2:用可变容器存储分数
如果不想频繁使用global关键字,可以把分数放到列表、字典这类可变对象中存储,修改可变对象的内部值不需要声明global:
- 把全局的分数定义修改为:
score = [0]
- 修改
on_mouse_down内的分数更新逻辑:
def on_mouse_down(pos): if apple.collidepoint(pos): score[0] = score[0] + 1 print(score[0]) place_apple() else : print("You missed!")
内容的提问来源于stack exchange,提问作者mark-in-motion
相关产品推荐
相关产品推荐

