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()値を返しません (おそらく何かを出力するだけです)。値を返さないメソッドはすべて を返しNone、に割り当てNoneましたself.values

以下に例を示します。

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

y何も出力しないことに注意してくださいNone(対話型プロンプトで何も出力しない唯一の値)。

于 2013-04-23T09:57:14.103 に答える
1

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

于 2013-04-23T09:53:53.033 に答える