2013-05-30 105 views
0

我正在写一个简单的基于文本的RPG游戏,我试图让库存系统正常工作。我已经逐字复制了工作代码,但是我收到了一个语法错误。我不确定我做错了什么,因为它对我来说很好。对不起,新手问题。谢谢!找不到语法错误

class Container(object): 

     def__init__(self, name): 
       self.name = name 
       self.inside = {} 

    def__iter__(self): 
      return iter(self.inside.items()) 

    def__len__(self): 
      return len(self.inside) 

    def__contains__(self, item): 
      return item.raw in self.inside 

    def__getitem__(self, item): 
      return self.inside[item.raw] 

    def__setitem__(self, item, value): 
      self.inside[item.raw] = value 
      return self[item] 

    def add (self, item, quantity=1): 
      if quantity < 0: 
        raise ValueError("Negative quantity. Use remove() instead.") 

      if item in self: 
        self[item].quantity += quantity 
        self[item].recalc() 

      else: 
        self[item].quantity -= quantity 
        self[item].recalc() 

,我得到以下错误,当我运行它:

Traceback (most recent call last): 
    File "game.py", line 2, in <module> 
    from characters.player import * 
    File "/home/dave/Projects/rpg-master/characters/player.py", line 4, in <module> 
    from items.container import * 
    File "/home/dave/Projects/rpg-master/items/container.py", line 4 
    def__init__(self, name): 
         ^
SyntaxError: invalid syntax 

非常感谢您的任何帮助。

+3

def__init__(self,name):'等'def'后面的空格 – Jared

+0

在所有函数声明中放入def后的空格。 –

+3

请注意,使用带语法高亮的好编辑器应该会立即发现这样的错误。 – mgilson

回答

8

你不必空格def后:

def__init__(self, name): 
    self.name = name 
    self.inside = {} 

应该

def __init__(self, name): 
    self.name = name 
    self.inside = {} 

等为该类的其余功能。

+0

是的,并且@PauloBu [说](http://stackoverflow.com/a/16845007/2423516),请确保您的代码缩进。 – 2013-05-30 20:08:02

+0

非常感谢大家。 – user2438061

+0

我在回答中添加了一些关于缩进的注释。希望它会有用。 –

6

首先,__init__没有很好的缩进。其次,你应该从实际的方法名称分开def关键字:

class Container(object): 

    def __init__(self, name): 
     self.name = name 
     self.inside = {} 

    def __iter__(self): 
     return iter(self.inside.items()) 

    def __len__(self): 
     return len(self.inside) 

    def __contains__(self, item): 
     return item.raw in self.inside 

    def __getitem__(self, item): 
     return self.inside[item.raw] 

    def __setitem__(self, item, value): 
     self.inside[item.raw] = value 
     return self[item] 

UPDATE:注意你混合缩进,蟒蛇通常建议4个空格缩进,但我看到您同时使用4和8,你可以使用任何你想要的,但坚持下去,不要混合它们,因为你可能会发现意想不到的行为。

希望这有助于!