TypeError:“NoneType”对象没有属性“__getitem__”

Posted

技术标签:

【中文标题】TypeError:“NoneType”对象没有属性“__getitem__”【英文标题】:TypeError: 'NoneType' object has no attribute '__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,所以请仔细检查这种情况。 【参考方案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(唯一在交互式提示上不打印任何内容的值)。

【讨论】:

以上是关于TypeError:“NoneType”对象没有属性“__getitem__”的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:“NoneType”类型的对象在尝试适合 KerasCLassifier 时没有 len()

Pandas 合并 TypeError:“NoneType”类型的对象没有 len()

Anvil 错误:TypeError:“NoneType”对象不可下标

TypeError:“NoneType”对象在 Python 中不可迭代

TypeError:调用键函数时“NoneType”对象不可迭代

运行测试时突然出现“TypeError:'NoneType'对象不可迭代