【问题标题】:TypeError: 'NoneType' object has no attribute '__getitem__'TypeError:“NoneType”对象没有属性“__getitem__”
【发布时间】:2012-12-04 04:22: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]

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

【问题讨论】:

  • 不知何故 self.values 设置为无。 move.CompleteMove 应该做什么?它返回什么值?
  • 还要注意任何没有return语句的函数都会返回None,所以请仔细检查这种情况。

标签: python typeerror


【解决方案1】:

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

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

【讨论】:

  • 感谢大家帮助我解决了这个问题,return 语句中有一个缩进错误,所以它返回 None 大声笑
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    这是一个例子:

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-13
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 2017-08-17
      • 2014-07-03
      • 2014-08-14
      相关资源
      最近更新 更多