2012-12-17 33 views
14

मुझे कोई समस्या है और मुझे नहीं पता कि यह क्यों हो रहा है और इसे कैसे ठीक किया जाए। मैं अजगर और pygame के साथ एक वीडियोगेम विकसित करने पर काम कर रहा हूँ और मैं इस त्रुटि हो रही है:टाइपरर: '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' किसी के लिए सेट नहीं है। 'Move.CompleteMove' क्या करना है? यह कितना मूल्य लौटाता है? – BrenBarn

+1

यह भी ध्यान दें कि कोई भी फ़ंक्शन जिसमें रिटर्न स्टेटमेंट नहीं है, वह 'कोई नहीं' लौटाएगा, इसलिए इस मामले के लिए सावधानीपूर्वक जांच करें। – DaveP

उत्तर

19

ब्रेनबर्न सही है। त्रुटि का मतलब है कि आपने None[5] जैसे कुछ करने की कोशिश की। बैकट्रैस में, यह self.imageDef=self.values[2] कहता है, जिसका अर्थ है कि आपका self.valuesNone है।

आपको self.values अपडेट करने वाले सभी कार्यों के माध्यम से जाना चाहिए और सुनिश्चित करें कि आप सभी कोने के मामलों के लिए खाते हैं।

+1

मेरी मदद करने के लिए सभी को धन्यवाद, मैं इस मुद्दे को ठीक कर सकता हूं, रिटर्न स्टेटमेंट पर इंडेंटेशन त्रुटि हुई थी, इसलिए यह लौट रहा था कोई भी लॉल नहीं – user1908896

1

फ़ंक्शन move.CompleteMove(events) जो आप अपनी कक्षा में उपयोग करते हैं, में शायद return कथन नहीं है। इसलिए self.values (==> कोई नहीं) पर कुछ भी वापस नहीं किया गया है। self.values में जो कुछ भी आप स्टोर करना चाहते हैं उसे वापस करने के लिए move.CompleteMove(events) में return का उपयोग करें और इसे काम करना चाहिए। उम्मीद है की यह मदद करेगा।

4

move.CompleteMove() कोई मूल्य नहीं लौटाता है (शायद यह केवल कुछ प्रिंट करता है)। कोई भी विधि जो मान वापस नहीं लौटाती None, और आपने None को self.values पर असाइन किया है।

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

आप y ध्यान दें जाएगा कुछ भी प्रिंट नहीं है, क्योंकि इसके None (केवल मूल्य कि इंटरैक्टिव शीघ्र पर कुछ भी प्रिंट नहीं करता है):

यहाँ इस का एक उदाहरण है।

संबंधित मुद्दे