96 Stimmen

hasattr() vs. try-except-Block zur Behandlung nicht vorhandener Attribute

if hasattr(obj, 'attribute'):
    # do somthing

gegen

try:
    # access obj.attribute
except AttributeError, e:
    # deal with AttributeError

Welche sollte bevorzugt werden und warum?

1 Stimmen

0voto

Unknown Punkte 44574

Die erste.

Kürzer ist besser. Ausnahmen sollten die Ausnahme sein.

5 Stimmen

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.

0 Stimmen

@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.

0 Stimmen

Wenn die Ausnahme die Ausnahme ist, dann ist "explizit besser", und die zweite Option des ursprünglichen Posters ist besser, würde ich sagen

0voto

Levite Punkte 16245

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.com

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.

Powered by:

X