所以我一直在研究Zed Shaw的Learn Python The Hard Way並且在練習43之前取得了一些相當不錯的成功,這個練習使用面向對象編程原理來創建一個非常簡單的基於文本的遊戲。我曾多次被得到一個屬性錯誤,更specifially:如何在Python中調試AttributeError?
File "PracticeGame.py", line 206, in <module>
a_game.play()
File "PracticeGame.py", line 20, in play
next_scene_name = current_scene.enter()
AttributeError: 'NoneType' object has no attribute 'enter'
我已經看到關於此錯誤的多個職位,但沒有一個答案都真正解釋的方式我能理解這個問題,也沒有提供的解決方案爲我工作。以下是從代碼行包括20行:
class Scene(object):
def enter(self):
print "This scene is not yet configured. Subclass it and implement enter()."
exit(1)
class Engine(object):
def __init__(self, scene_map):
self.scene_map = scene_map
def play(self):
current_scene = self.scene_map.opening_scene()
while True:
print "\n-------"
next_scene_name = current_scene.enter() #this is line 20
current_scene = self.scene_map.next_scene(next_scene_name)
return current_scene
這是206
a_map = Map('central_corridor')
a_game = Engine(a_map)
a_game.play() #line 206
作爲圖被限定的代碼,包括行的末尾:
class Map(object):
scenes = {
'central_cooridor': CentralCorridor(),
'laser_weapon_armory': LaserWeaponArmory(),
'the_bridge': TheBridge(),
'escape_pod': EscapePod(),
'death': Death()
}
def __init__(self, start_scene):
self.start_scene = start_scene
def next_scene(self, scene_name):
return Map.scenes.get(scene_name)
def opening_scene(self):
return self.next_scene(self.start_scene)
我從明白不同的帖子,這個錯誤消息意味着第20行的一部分沒有定義,但我失去了什麼沒有定義以及爲什麼發生。我是Python的新手。
請發表'self.scene_map.opening_scene()'或'Map'的定義 – dm03514
我剛加入帖子,在評論中看起來不太好 – Woomfy