28

我遇到了问题,我不知道为什么会发生这种情况以及如何解决它。我正在使用 python 和 pygame 开发视频游戏,但出现此错误:

 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]

你能向我解释这个错误是什么意思以及为什么会发生这样我就可以修复它吗?

4

3 回答 3

27

布伦巴恩是正确的。该错误意味着您尝试执行类似None[5]. 在回溯中,它说self.imageDef=self.values[2],这意味着你self.valuesNone

您应该检查所有更新的功能,self.values并确保您考虑了所有极端情况。

于 2012-12-17T04:32:56.543 回答
8

move.CompleteMove() does not return a value (perhaps it just prints something). Any method that does not return a value returns None, and you have assigned None to self.values.

Here is an example of this:

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

You'll note y doesn't print anything, because its None (the only value that doesn't print anything on the interactive prompt).

于 2013-04-23T09:57:14.103 回答
1

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

于 2013-04-23T09:53:53.033 回答