Mariam Haji wrote: > Hi guys, > > I am still on the learn python the hard way. > I built the below on python 2.7 and my OS is windows 7. > > I am getting this error: > Traceback (most recent call last): > File "ex43.py", line 205, in <module> > a_game.play() > File "ex43.py", line 21, in play > next_scene_name = current_scene.enter() > AttributeError: 'NoneType' object has no attribute 'enter'
The value of current_scene is None here. If you dig a bit in your code looking for places where that can happen you end up with > class Map(object): > scenes = { > 'central_corridor': 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) Map.scenes is a dict, and its get() method returns None when the lookup for a key fails. If you pass an unknown scene name to the next_scene() method it returns None rather than a Scene instance. As a first step to fix this I recommend that you use the item lookup operator instead of the method: def next_scene(self, scene_name): return Map.scenes[scene_name] This will fail immediately, and the error message should be more informative. I got: Traceback (most recent call last): File "./game_mariam.py", line 181, in <module> a_game.play() File "./game_mariam.py", line 20, in play current_scene = self.scene_map.next_scene(next_scene_name) File "./game_mariam.py", line 173, in next_scene return Map.scenes[scene_name] KeyError: 'laser_weapon_armoury' That is, you need to decide if you want British or American orthography. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor