Wayne Werner wrote:
However, rare is the occasion that you should use either of these. If you're
doing something like:
if hasattr(myobj, 'something'):
myobj.something()
else:
print "blah blah blah"
then what you really should be doing is:
try:
myobj.something()
except AttributeError:
print "blah blah blah"
because 1) you avoid the overhead of an extra(?) try-except block,
But there is no extra try-except block, because you've just explained
that hasattr itself contains a try-except block. The only difference is
whether it is explicit in your own code, or implicit inside hasattr.
More likely though, hasattr (like its cousins getattr and setattr) will
be used when the attribute name isn't known until runtime, rather than
for fixed strings:
name = get_some_name_from_somewhere(arg)
if hasattr(myobj, name):
result = getattr(myobj, name)
else:
do_something_else()
Of course, you could do this instead:
try:
result = getattr(myobj, name)
except AttributeError:
do_something_else()
or even this:
result = getattr(myobj, name, default_value)
--
Steven
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor