TypeError: el objeto ‘NoneType’ no tiene atributo ‘__getitem__’

Tengo un problema y no tengo idea de por qué sucede esto y cómo solucionarlo. Estoy trabajando en el desarrollo de un videojuego con python y pygame y obtengo este error:

File "/home/matt/Smoking-Games/sg-project00/project00/GameModel.py", line 15, in Update self.imageDef=self.values[2] TypeError: 'NoneType' object has no attribute '__getitem__' 

El código:

 import pygame,components from pygame.locals import * class Player(components.Entity): def __init__(self,images): components.Entity.__init__(self,images) self.values=[] def Update(self,events,background): move=components.MoveFunctions() self.values=move.CompleteMove(events) self.imageDef=self.values[2] self.isMoving=self.values[3] def Animation(self,time): if(self.isMoving and time==1): self.pos+=1 if (self.pos>(len(self.anim[self.imageDef])-1)): self.pos=0 self.image=self.anim[self.imageDef][self.pos] 

¿Puede explicarme qué significa ese error y por qué está ocurriendo para que pueda solucionarlo?

BrenBarn es correcto. El error significa que intentó hacer algo como None[5] . En la parte posterior, dice self.imageDef=self.values[2] , lo que significa que tu self.values es None .

Debe revisar todas las funciones que actualizan los self.values y asegurarse de tener en cuenta todos los casos de esquina.

move.CompleteMove() no devuelve un valor (tal vez solo imprima algo). Cualquier método que no devuelva un valor devuelve None , y usted ha asignado None a los self.values .

Aquí hay un ejemplo de esto:

 >>> def hello(x): ... print x*2 ... >>> hello('world') worldworld >>> y = hello('world') worldworld >>> y >>> 

Notará que y no imprime nada, porque es None (el único valor que no imprime nada en el indicador interactivo).

La función move.CompleteMove(events) que usa dentro de su clase probablemente no contiene una statement de return . Así que nada se devuelve a self.values (==> None). Use return in move.CompleteMove(events) para devolver lo que quiera almacenar en self.values y debería funcionar. Espero que esto ayude.