Mais fácil pedir perdão do que permissão

Em Python costumamos ouvir que é mais fácil pedir perdão do que pedir permissão (It's easier to ask for forgiveness than permission), mas o que isso realmente significa?

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.

Tecnologia:
python

Deixe seu Comentário!

Comentário
Nome
Email