kost BebiX wrote:
You're absolutely right! Now try to do except Keyerror: raise AttributeError 
and it will also fail. But why?

07.01.2011, 15:45, "Jean-Michel Pichavant" <jeanmic...@sequans.com>:
kost BebiX wrote:

 Hi everyone!
 I just saw a bug (?) in bson.dbref:DBRef.__getattr__

 Here's they're code:
     def __getattr__(self, key):
         return self.__kwargs[key]

 And when you do copy.deepcopy on that object it will raise you KeyError. So 
here's a small piece of code that reproduces the problem:
from http://docs.python.org/reference/datamodel.html

About __getattr__
"This method should return the (computed) attribute value or raise an
AttributeError
<http://docs.python.org/library/exceptions.html#exceptions.AttributeError>
exception."

The code you provided raises a KeyError thus methods such as 'getattr'
will fail as they expect an AttributeError exception.

JM

--
http://mail.python.org/mailman/listinfo/python-list

please don't top post :)

It fails because you simply did not returned any value (with your class A example).

class A(object):
   def __init__(self):
       self.d = {}
   def __getattr__(self, key):
       try:
           *return* self.d[key]
       except KeyError:
           raise AttributeError


works fine with deepcopy

JM
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to