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 True
se for bem-sucedido, False
se não), mas lidar com exceções em C é muito mais rápido.