if hasattr(obj, 'attribute'):
# do somthing
gegen
try:
# access obj.attribute
except AttributeError, e:
# deal with AttributeError
Welche sollte bevorzugt werden und warum?
if hasattr(obj, 'attribute'):
# do somthing
gegen
try:
# access obj.attribute
except AttributeError, e:
# deal with AttributeError
Welche sollte bevorzugt werden und warum?
Ausnahmen sind in Python sehr häufig - es gibt eine am Ende jeder for
Anweisung, und hasattr
benutzt auch einen. Allerdings gilt "kürzer ist besser" (und "einfacher ist besser"!), so dass das einfachere, kürzere, spezifischere hasattr tatsächlich vorzuziehen ist.
@Alex nur weil der Python-Parser diese Anweisungen umwandelt, um 1 zu haben, bedeutet nicht, dass es sehr häufig ist. Es gibt einen Grund, warum sie diesen syntaktischen Zucker gemacht haben: damit man nicht mit der Mühsal der Eingabe des try except-Blocks feststeckt.
Zumindest dann, wenn es nur darum geht, was im Programm vor sich geht, und nicht um den menschlichen Teil der Lesbarkeit usw. (der eigentlich meistens wichtiger ist als die Leistung (zumindest in diesem Fall - mit dieser Leistungsspanne), wie Roee Adler und andere betonten).
Dennoch sollte man die Sache aus dieser Perspektive betrachten, ist es dann eine Frage der Wahl zwischen
try: getattr(obj, attr)
except: ...
y
try: obj.attr
except: ...
seit hasattr
verwendet nur den ersten Fall, um das Ergebnis zu ermitteln. Ein Denkanstoß ;-)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
1 Stimmen
Duplikat: stackoverflow.com/questions/598157/ , stackoverflow.com/questions/610883/