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

Reply via email to