使用pygame开发Python飞机大战游戏时出现NameError错误该如何解决?
错误根因
你触发NameError: name 'left' is not defined的原因是Python变量作用域规则:
left、right两个Rect对象是定义在main()函数内部的局部变量,仅在main()函数的作用域内可访问draw_window()是独立的函数,默认无法读取main()内部定义的局部变量,所以调用draw_window()时找不到left、right变量就会报错
修复方案
推荐使用第一种传参方案,更符合函数封装规范,避免全局变量带来的意外修改风险:
方案1:把left、right作为参数传入draw_window函数
只需要修改两处代码:
- 修改
draw_window的定义,增加两个入参:
def draw_window(left, right): win.fill((0, 0, 0)) #设置背景为黑色 win.blit(leftjet, (left.x, left.y)) win.blit(rightjet, (right.x, right.y)) pygame.display.update()
- 修改
main()里调用draw_window的位置,传入两个参数:
draw_window(left, right)
方案2:将left、right声明为全局变量(不推荐)
在main()里定义left、right前加global声明即可:
def main(): global left, right left = pygame.Rect(100, 100, 55, 40) right = pygame.Rect(800, 100, 55, 40) # 剩余代码保持原有逻辑不变
内容的提问来源于stack exchange,提问作者user15977631
相关产品推荐
相关产品推荐

