TypeError:'NoneType'对象没有属性'__getitem__'

时间:2012-12-17 03:33:29

标签: python typeerror

我遇到了问题,我不知道为什么会这样,以及如何解决这个问题。我正在使用python和pygame开发一个Videogame,我收到了这个错误:

 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__'

代码:

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]

你能解释一下这个错误意味着什么以及为什么会这样,我可以解决它吗?

3 个答案:

答案 0 :(得分:24)

BrenBarn是对的。该错误意味着您尝试执行None[5]之类的操作。在回溯中,它显示self.imageDef=self.values[2],表示您的self.valuesNone

您应该完成更新self.values的所有功能,并确保考虑所有角落案例。

答案 1 :(得分:6)

move.CompleteMove()没有返回值(也许只是打印一些东西)。任何不返回值的方法都会返回None,并且您已将None分配给self.values

以下是此示例:

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

您会注意到y没有打印任何内容,因为它是None(在交互式提示下不打印任何内容的唯一值)。

答案 2 :(得分:1)

您在类中使用的函数move.CompleteMove(events)可能不包含return语句。所以没有任何内容返回self.values(==>无)。使用return中的move.CompleteMove(events)返回您要存储在self.values中的任何内容,它应该有效。希望这会有所帮助。