En Python, j'entends souvent dire qu'il est préférable de "demander pardon" (capture d'exception) au lieu de "demander l'autorisation" (vérification de type / condition). En ce qui concerne l'application de la frappe de canard en Python, est-ce que c'est
try:
x = foo.bar
except AttributeError:
pass
else:
do(x)
mieux ou pire que
if hasattr(foo, "bar"):
do(foo.bar)
else:
pass
en termes de performances, de lisibilité, de "pythonique" ou de tout autre facteur important?
hasattr
est mis en œuvre avec cet essai / interception exact en interne. Pas sûr que ce soit vrai ... (j'agirais différemment sur les propriétés, n'est-ce pas? getattr
)
hasattr
utilise l'équivalent C-API de getattr
(retourne en True
cas de succès, False
sinon), mais la gestion des exceptions en C est beaucoup plus rapide.