AttributeError:'Nonetype'对象没有属性'enter'python

时间:2015-11-06 17:19:06

标签: python oop

我正在学习python,学习python很难,而且我正在使用dict和class进行'游戏'。代码不完整,但主要问题是AttributeError。

我遇到了这个错误:

Traceback (most recent call last):
  File "juego.py", line 86, in <module>
    juego.play()
  File "juego.py", line 60, in play
    game.enter()
AttributeError: 'NoneType' object has no attribute 'enter'

代码:

class entry(): #OK
   def enter(self):
       print 'Llegaste a la primera habitacion, miras a tu alrededor...'
       print 'y ves un boton rojo en la pared...'
       print 'Que haces?'
       print 'Apretas el boton?'
       print 'O seguis mirando?'
       boton_rojo = raw_input('> ')
       if 'boton' in boton_rojo:
           print 'Apretas el boton y...'
           print 'Aparece una puerta adelante tuyo!'
           return  'Rescate_Prisionero'
       elif 'mir' in boton_rojo:
           print 'Seguis mirando...'
           print '...'
           print 'no encontras nada y decidis apretar el boton rojo'
           print 'Apretas el boton y...'
           print 'Aparece una puerta adelante tuyo!'
       else:
           print 'eh? que dijiste?'


class rescate_prisionero():
   def enter(self):
       print 'parece que si'
       return 'Mago_Poderoso'

class mago_poderoso():
   def enter(self):
       print 'trolo'
       return 'Pelea_esqueleto'

class pelea_esqueleto():
   def enter(self):
       print 'esque'
       return 'Habitacion_Vacia'

class habitacion_vacia():
   def enter(self):
      print 'vac'
      return 'Final_Scene'

class final_scene():
   def enter(self):
      print 'parece que esta todo bien'


class Engine(object):
   def __init__(self, primer_escena):
   self.primer_escena = primer_escena

   def play(self):
      ultima_escena = Map.Escenas.get('Final_Scene')
      game =self.primer_escena.arranque().enter()
      while game != ultima_escena:
         game = Map.Escenas.get(game)
         game.enter()



class Map():
   def __init__(self, primer_escena):
   self.primer_escena = primer_escena

   def arranque(self):
     inicio = Map.Escenas.get(self.primer_escena)
     return inicio





 Escenas = { 'Entry' : Entry(),
             'Rescate_Prisionero' : rescate_prisionero(),
             'Mago_Poderoso' : mago_poderoso(),
             'Pelea_esqueleto' : pelea_esqueleto(),
             'Habitacion_Vacia' : habitacion_vacia(),
             'Final_Scene' : final_scene()
 }

 pepe = Map('Entry')
 juego = Engine(pepe)
 juego.play()
编辑:抱歉,我忘记了错误,代码现已完成

1 个答案:

答案 0 :(得分:0)

您收到此错误是因为在某些时候game成为None对象。这可能发生在许多不同的步骤,因此可能很难追查。如果您未找到密钥,则只要您拨打dict.get,就会返回None

将所有dict.get(key)语句更改为dict[key]语句可能最容易。如果字典不包含密钥,似乎没有任何方法可以继续进行,因此抛出KeyError肯定比稍后抑制错误更好。

您的Map.Escenas个值中的一个或多个也可能是None,所以即使dict.get找到了值,它也会返回None。这就是使用dict[key]在这里有用的原因 - 至少你可以缩小范围!您没有包含任何函数中的任何代码:

Entry
rescate_prisionero
mago_poderoso
pelea_esqueleto
habitacion_vacia
final_scene

所以我们没办法在这里查看。