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?
hasattrdass 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, Truewenn erfolgreich, Falsewenn nicht), aber die Behandlung von Ausnahmen in C ist viel schneller.