python - AttributeError: 'bool' object has no attribute 'keys' -


i newbie on site , newbie programming, i'm trying learn python using book beginners on python 3.1. have come across example won't work whatever try, have searched faults in writing 10 times still seems see in book. example:

the fridge class

#!/usr/bin/env class fridge:     """methods:     has(food_name [, quantity])-chk if string in fridge     has_various(foods)-chk if enough food in fridge     add_one(food_name) -adds 1 food     add_many(food_dict)- adds dict fridge     get_one(food_name)- take out 1 food     get_many(food_dict) - dict out of fridge     get_ingred(food)- if passed obj list of __ingredients__     """     def __init__(self, items={}) :         if type(items) != type({}):             raise typeerror("fridge req dict given %s" %  type(items))         self.items=items         return     def __add_multi(self, food_name, quantity):         if (not food_name in self.items):             self.items[food_name]=0         self.items[food_name]=self.items[food_name]+quantity     def add_one(self, food_name):         if type(food_name) != type(""):             raise typeerror ("add_one requires string givem %s " % type(food_name))         else:             self.__add_multi(food_name, 1)         return true     def add_many(self, food_dict):         if type(food_dict) != type({}):             raise typeerror ("add_many requires dict, got %s" % type(food_dict))         item in food_dict.keys() :             self.__add_multi(item, food_dict[item])         return     def has(self, food_name, quantity=1):         return self.has_varoius({food_name:quantity})     def has_various(self, foods):         try:             food in foods.keys():                 if self.items[food] < foods[food]:                     return false             return true         except keyerror:             return fasle     def __get_multi(self, food_name, quantity):         try:             if (self.items[food_name] none) :                 return false             if (quantity > self.items[food_name]):                 return false             self.items[food_name] = self.items[food_name] - quantity         except keyerror:             return false         return quantity     def get_one(self, food_name):         if type(food_name) !=type(""):             raise typeerror("get_one requires string , given %s" % type(food_name))         else:             result=self.__get_multi(food_name, 1)             return result     def get_many(self, food_dict):         if self.has_various(food_dict):             foods_removed={}             item in food_dict.keys():                 foods_removed[item]=self.__get_multi(item, food_dict[item])             return foods_removed     def get_ingredients(self, food):         try:             ingredients=self.get_many(food.__ingredients())         except attributeerror:             return false         if ingredients!=false:             return ingredients 

the omelet class

 #!/usr/bin/env python3.3 class omelet:      def __init__(self, kind="cheese"):         self.set_kind(kind)         return      def __ingredients__(self):         return self.needed_ingredients      def get_kind(self):         return self.kind      def set_kind(self, kind):         possible_ingredients=self.__known_kinds(kind)         if possible_ingredients == false :             return false         else:             self.kind=kind             self.needed_ingredients= possible_ingredients      def set_new_kind(self, name, ingredients):         self.kind=name         self.needed_ingredients= ingredients         return      def __known_kinds(self, kind):         if kind == "cheese":             return {"eggs":2, "milk":1, "cheese":1}         elif kind == "mushroom":             return {"eggs":2, "milk":1, "cheese":1, "mushroom":2}         elif kind == "onion":             return {"eggs":2, "milk":1, "cheese":1, "onion":1}         else:             return false      def get_ingredients(self, fridge):         self.from_fridge= fridge.get_ingredients(self)      def mix(self):         ingredient in self.from_fridge.keys():             print("mixing %d %s %s omelet" % (self.from_fridge["ingredient"], ingredient, self.kind))         self.mixed=true      def make(self):         if self.mixed == true:             print("cooking %s omelet!" % self.kind)             self.cooked = true  

this how invoke classes , use classes , error get

>>> exec(open("/home/knoppix/test/fridge.py").read()) >>> exec(open("/home/knoppix/test/omelet.py").read()) >>> o=omelet("cheese") >>> f=fridge({"cheese":5, "milk":4, "eggs":12}) >>> o.get_ingredients(f) >>> o.mix() traceback (most recent call last):   file "<stdin>", line 1, in <module>   file "<string>", line 41, in mix attributeerror: 'bool' object has no attribute 'keys' 

please excuse me if there typing fault in code , it`s found in book!

def get_ingredients(self, fridge):     self.from_fridge= fridge.get_ingredients(self) 

in function, fridge.get_ingredients() might returning false.

so self.from_fridge has boolean value not have keys() method.

you may want add appropriate check in mix() method.


Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

How to get multiresult with multicondition in Sql Server -