web-dev-qa-db-ja.com

TypeError: 'NoneType'オブジェクトには属性 '__getitem__'がありません

私は問題を抱えており、なぜこれが起こっているのか、どのように修正するのか分かりません。私は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]

そのエラーが何を意味するのか、なぜそれが起こっているのかを説明してください。

23
user1908896

BrenBarnは正しいです。このエラーは、None[5]のようなことをしようとしたことを意味します。バックトレースでは、self.imageDef=self.values[2]と表示されます。つまり、self.valuesNoneです。

self.valuesを更新するすべての機能を実行し、すべてのコーナーケースを考慮してください。

24
user1902824

move.CompleteMove()は値を返しません(おそらく何かを出力するだけです)。値を返さないメソッドはNoneを返し、Noneself.valuesに割り当てました。

次に例を示します。

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

y(インタラクティブプロンプトに何も印刷しない唯一の値)であるため、Noneは何も印刷しないことに注意してください。

6
Burhan Khalid

クラス内で使用する関数move.CompleteMove(events)には、おそらくreturnステートメントが含まれていません。したがって、_self.values_(==> None)には何も返されません。 move.CompleteMove(events)returnを使用して、_self.values_に保存したいものを返します。お役に立てれば。

1
mlcr