Em Python, uma prática idiomática que pode surpreender quem vem de outras linguagens é o EAFP: "Easier to Ask Forgiveness than Permission" (é mais fácil pedir perdão do que permissão). O EAFP sugere que você deve tentar executar uma ação e lidar com exceções caso algo não funcione, ao invés de verificar previamente todas as condições.
O oposto do EAFP é o LBYL: "Look Before You Leap" (olhe antes de pular). No LBYL, você verifica se tudo está certo antes de agir, evitando exceções.
Exemplo LBYL
Recebendo um dicionário que pode (ou não) ter uma determinada chave, o estilo LBYL verifica antes de acessar:
if "key" in dict_:
value += dict_["key"]
else:
# A chave não existe, nada acontece
pass
Exemplo EAFP
No estilo EAFP, você simplesmente tenta acessar e trata a exceção se necessário:
try:
value += dict_["key"]
except KeyError:
# A chave não existe, nada acontece
pass
Comparação prática
O LBYL pode comunicar que a ausência da chave é algo especial, enquanto o EAFP deixa claro que o normal é a chave existir, mas se faltar, não é um problema.
Cuidados com EAFP
Evite envolver muito código dentro do try, pois pode capturar exceções que não deveriam ser ignoradas. Veja um exemplo ruim:
try:
do_something(dict_["key"])
except KeyError:
pass # Pode suprimir KeyError de do_something, o que não é desejado
O ideal é isolar apenas o acesso potencialmente problemático:
try:
value = dict_["key"]
except KeyError:
pass
else:
do_something(value)
LBYL também pode ser útil
Em alguns casos, o LBYL pode ser mais claro ou seguro, especialmente quando você quer evitar exceções:
if "key" in dict_:
do_something(dict_["key"])
Conclusão
EAFP é um estilo legítimo e muito usado em Python, principalmente quando o acesso a recursos pode falhar. Use-o quando fizer sentido, mas sempre com cuidado para não capturar exceções demais. O LBYL também é válido em situações onde a verificação prévia é mais clara ou necessária.
0 Comentário
Deixe seu Comentário!