In Python höre ich oft, dass es besser ist, "um Verzeihung zu bitten" (Ausnahmefang), als "um Erlaubnis zu bitten" (Typ- / Zustandsprüfung). In Bezug auf die Durchsetzung der Enten-Typisierung in Python ist dies
try:
x = foo.bar
except AttributeError:
pass
else:
do(x)
besser oder schlechter als
if hasattr(foo, "bar"):
do(foo.bar)
else:
pass
in Bezug auf Leistung, Lesbarkeit, "Python" oder einen anderen wichtigen Faktor?
hasattr
dass dies intern mit genau diesem Try / Catch umgesetzt wurde. Nicht sicher, ob es wahr ist ... (es würde anders auf Eigenschaften wirken, nicht wahr? Vielleicht denke ich an getattr
..)
hasattr
verwendet das C-API-Äquivalent von getattr
(return, True
wenn erfolgreich, False
wenn nicht), aber die Behandlung von Ausnahmen in C ist viel schneller.