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