En Python, a menudo escucho que es mejor "pedir perdón" (captura de excepción) en lugar de "pedir permiso" (verificación de tipo / condición). En lo que respecta a hacer cumplir la escritura de pato en Python, ¿es esto
try:
x = foo.bar
except AttributeError:
pass
else:
do(x)
mejor o peor que
if hasattr(foo, "bar"):
do(foo.bar)
else:
pass
en términos de rendimiento, legibilidad, "pitónico" o algún otro factor importante?
hasattr
se implementa con ese intento / captura exacto internamente. No estoy seguro de si es verdad ... (actuaría de manera diferente en las propiedades, ¿no? Tal vez estoy pensando en getattr
...)
hasattr
utiliza el equivalente C-API de getattr
(devolver True
si tiene éxito, False
si no), pero manejar excepciones en C es mucho más rápido.