[Zope-dev] zope.interface: verifyObject vs properties

Jim Fulton jim at zope.com
Wed Oct 15 11:15:45 EDT 2008


On Oct 15, 2008, at 3:27 AM, Thomas Lotze wrote:

> There has been a problem with zope.interface's verifyObject function
> that occurs in conjunction with Python properties: when verifyObject
> checks for the presence of an object's attribute, it does so by using
> hasattr() which in turn tries a getattr() call. If the attribute is
> implemented as a property, this may raise an exception which will be
> masked by hasattr() due to a bare except: clause. One scenario where
> this is a problem is a property that performs some component lookup
> which will succeed at application runtime but not in unit tests where
> verifyObject is commonly used.
>
> While it has also been argued that behaviour so complex that it may
> raise an Exception should not be implemented as a property in the
> first place, we believe that verifyObject should handle this case  
> better
> than it currently does. A possible fix would be to add an additional
> check for a data descriptor on the object's class if the hasattr()  
> test
> returns False.
>
> Are there any objections against modifying verifyObject in this way?


I would change it to just use getattr rather than hasattr.

try:
    getattr(ob, name)
except AttributeError:
    return False
...

Jim


--
Jim Fulton
Zope Corporation




More information about the Zope-Dev mailing list