Are you using this only to check whether some object has attributes? If so, use the built-in function hasattr (which in fact does the same test as you have implemented manually anyway.
Otherwise, you must loop.
If you think about the structure of the code, what you are really wanting is three try...except blocks -- after all, if exceptions returned flow to where they were raised after being processed, they wouldn't be very exceptional!
It would be pretty easy to write a loop, though:
atts = []
for attr in ("att1", "att2", "att3"):
try:
attrs.append(getattr(myobj, attr))
except AttributeError:
attrs.append[None]
att1, att2, att3 = atts
If you really want the attributes as local variables, you could even do:
for attr in ("att1", "att2", "att3"):
try:
locals()[attr] = getattr(myobj, attr)
except AttributeError:
pass