Skip to main content
 首页 » 编程设计

python之类型错误 : 'int' object has no attribute '__getitem__'

2025年05月04日11telwanggs

我正在尝试用 pygame 中的矩形制作一个游戏表面。我不确定问题到底是什么,但我相信它与创建矩形时列表的实际迭代有关。对不起,菜鸟在这里。 :)

import pygame 
 
w = 800 
h = 600 
board_pos = 0, 0 
tile = 27 
playfield = 0 
 
class Board(object): 
    def __init__(self, surface, pos, tile_size): 
        self.surface = surface 
        self.x, self.y = pos 
        self.tsize = tile_size 
        self.color = 50, 50, 50 
 
        playfield = [list(None for i in xrange(22)) for i in xrange(10)]   
 
    def draw(self): 
        for i in xrange(10): 
            for j in xrange(22): 
                playfield[i][j] = pygame.draw.rect(self.surface, self.color, 
                                                  (self.x + (i * self.tsize), 
                                                   self.y + (j * self.tsize), 
                                                   self.tsize, self.tsize)) 
 
pygame.display.init() 
screen = pygame.display.set_mode((w, h)) 
 
board = Board(screen, board_pos, tile) 
board.draw() 
 
while __name__ == '__main__': 
    pygame.display.flip() 

我一直收到这个错误:

Traceback (most recent call last): 
  File "C:\Documents and Settings\Administrator\My 
Documents\Dropbox\Programming\DeathTris 
\test2.py", line 30, in <module> 
    board.draw() 
  File "C:\Documents and Settings\Administrator\My 
Documents\Dropbox\Programming\DeathTris 
\test2.py", line 24, in draw 
    self.tsize, self.tsize)) 
TypeError: 'int' object has no attribute '__getitem__' 

如有任何帮助,我们将不胜感激。谢谢!

请您参考如下方法:

您的代码行 playfield = [list(None for i in xrange(22)) for i in xrange(10)] 在 __init__ 函数中创建了一个局部变量。该变量在 __init__ 函数返回后消失。稍后在 draw 中,当您执行 playfield[i][j] 时,您正在访问 playfield 的全局值,它仍然是 0(因为你在开始时将它初始化为 0)。

如果你想从你的 __init__ 中覆盖全局 playfield,你需要在分配给它之前执行 global playfield。 (但是......你为什么要为此使用全局变量?)