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

使用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函数

只需要修改两处代码:

  1. 修改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()
  1. 修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 09:06:05