2012-12-17 162 views
14

我遇到問題,我不知道爲什麼會發生這種情況以及如何解決問題。我工作的發展與Python和pygame的一個視頻遊戲,我得到這個錯誤:TypeError:'NoneType'對象沒有屬性'__getitem__'

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] 

你能向我解釋什麼是錯誤的手段和爲什麼它是發生,所以我可以修復它?

+7

不知何故'self.values'被設置爲None。 'move.CompleteMove'應該做什麼?它返回什麼價值? – BrenBarn

+1

另請注意,任何沒有返回語句的函數都會返回'None',因此請仔細檢查這種情況。 – DaveP

回答

19

BrenBarn是正確的。該錯誤意味着您嘗試執行類似None[5]的操作。在回溯中,它說self.imageDef=self.values[2],這意味着你的self.valuesNone

你應該通過所有更新self.values的功能,並確保你佔所有的角落案件。

+1

感謝大家對我的幫助,我可以解決這個問題,return語句中有一個縮進錯誤,所以它返回無大聲笑 – user1908896

1

您在類中使用的函數move.CompleteMove(events)可能不包含return語句。所以沒有任何東西返回到self.values(==>無)。在move.CompleteMove(events)中使用return返回任何你想存儲在self.values,它應該工作。希望這可以幫助。

4

move.CompleteMove()不返回一個值(也許它只是打印一些東西)。任何不返回值的方法返回None,並且您已將None分配到self.values

下面是這樣一個例子:

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

你會注意到y沒有打印任何東西,因爲它None(即不會在交互提示打印任何東西,唯一的價值)。

相關問題