[Zope-dev] Bad idiom to access optional attributes
Dieter Maurer
dieter at handshake.de
Mon Jun 7 01:46:41 EDT 2004
I just analysed why "AccessControl.Role.RoleManager.get_valid_userids"
raised an unexpected "AttributeError".
It uses the wrong idiom to access optional attribute:
aclu = getattr(aq_base(item), '__allow_groups__', _notfound)
This means, that "aclu" is only partially acquisition wrapped
and does not behave as usual.
Until Tim reported that "hasattr" behaves bad with respect
to exceptions, I have been convinved, that the following
idiom were correct:
if hasattr(aq_base(obj), attrname):
attr = getattr(obj, attrname)
...
Meanwhile, the best way to access optional attributes seems to be
if getattr(aq_base(obj), attrname, notFound) is not notFound:
attr = getattr(obj, attrname)
...
Please keep this in mind when you push the
"Death to 'hasattr'" project.
--
Dieter
More information about the Zope-Dev
mailing list