Em Python, ouço muitas vezes que é melhor "pedir perdão" (captura de exceção) em vez de "pedir permissão" (verificação de tipo / condição). No que diz respeito à imposição de digitação de pato em Python, isso é
try:
x = foo.bar
except AttributeError:
pass
else:
do(x)
melhor ou pior que
if hasattr(foo, "bar"):
do(foo.bar)
else:
pass
em termos de desempenho, legibilidade, "pitônico" ou algum outro fator importante?
hasattré implementado com essa tentativa / captura exata internamente. Não certo se é verdade ... (ele agiria de forma diferente sobre as propriedades, não seria Talvez eu estou pensando? getattr..)
hasattr usa o equivalente C-API de getattr(retorne Truese for bem-sucedido, Falsese não), mas lidar com exceções em C é muito mais rápido.