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