try print example errors error custom python typeerror

python - print - TypeError: el objeto ''NoneType'' no tiene atributo ''__getitem__''



use try python (3)

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 recibo 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 intentaste 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.


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


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).