O que se entende por "usar o princípio EAFP" em Python? Você poderia fornecer alguns exemplos?
python
principles
Oráculos não pagos
fonte
fonte
Respostas:
No glossário :
Um exemplo seria uma tentativa de acessar uma chave de dicionário.
EAFP:
LBYL:
A versão LBYL deve procurar a chave dentro do dicionário duas vezes e também pode ser considerada um pouco menos legível.
fonte
x
quando a chave não existe:x = mydict.get('key')
retornaráNone
se'key'
não estivermy_dict
; você também pode fazer.get('key', <something>)
e, em seguida, x será atribuído a algo assim se a chave não estiver no dicionário.dict.setdefault()
ecollections.defaultdict
são boas coisas para evitar o excesso de código também.except KeyError
queAttributeError
são simples, mas são alguns dos piores exemplos. Muitas vezes eu estava preso a depurar alguma coisa porqueexcept AttributeError
foi colocado no lugar errado, o que acabou pegando um erro de atributo errado gerado mais profundamente na cadeia. Melhores exemplos que eu acho que são:try: open() ... except: IOError
. Outry: parseLine() ... except ParseError
Vou tentar explicar com outro exemplo.
Aqui estamos tentando acessar o arquivo e imprimir o conteúdo no console.
LBYL - Olhe antes de pular:
Podemos querer verificar se podemos acessar o arquivo e, se pudermos, abriremos e imprimiremos o conteúdo. Se não pudermos acessar o arquivo, acessaremos a
else
parte. A razão pela qual essa é uma condição de corrida é porque primeiro fazemos uma verificação de acesso. Quando chegamos,with open(my_file) as f:
talvez não possamos mais acessá-lo devido a alguns problemas de permissão (por exemplo, outro processo ganha um bloqueio exclusivo de arquivo). Esse código provavelmente causará um erro e não poderemos capturá-lo porque pensamos que poderíamos acessar o arquivo.EAFP - Mais fácil pedir perdão do que permissão:
Neste exemplo, estamos apenas tentando abrir o arquivo e, se não podemos abri-lo, lançará um
IOError
. Se pudermos, abriremos o arquivo e imprimiremos o conteúdo. Então, em vez de perguntar algo, estamos tentando fazer isso. Se funcionar, ótimo! Caso contrário, capturamos o erro e o tratamos.fonte
Eu chamo de "programação otimista". A ideia é que na maioria das vezes as pessoas façam a coisa certa, e os erros devem ser poucos. Portanto, primeiro codifique para que a "coisa certa" aconteça e, em seguida, identifique os erros, caso contrário.
Meu sentimento é que, se um usuário cometer erros, ele deve sofrer as conseqüências do tempo. As pessoas que usam a ferramenta da maneira certa são aceleradas.
fonte