Eu gosto de criar um NotImplementedError
método para qualquer método que eu queira implementar, mas onde ainda não cheguei a fazê-lo. Talvez eu já tenha uma implementação parcial, mas acrescente-a raise NotImplementedError()
porque ainda não gosto. Por outro lado, também gosto de seguir as convenções, pois isso facilitará a manutenção de meu código por outras pessoas, e as convenções podem existir por um bom motivo.
No entanto, a documentação do Pythons para NotImplementedError afirma:
Esta exceção é derivada de RuntimeError. Nas classes base definidas pelo usuário, os métodos abstratos devem gerar essa exceção quando exigirem que as classes derivadas substituam o método.
Esse é um caso de uso formal muito mais específico do que o que eu descrevo. É um estilo convencional bom NotImplementedError
sugerir simplesmente que essa parte da API é um trabalho em andamento? Caso contrário, existe uma maneira padronizada diferente de indicar isso?
fonte
Respostas:
Vale ressaltar que, embora a documentação do Python forneça um caso de uso (e provavelmente o canônico) para essa exceção, ela não exclui especificamente seu uso em outros cenários.
Eu consideraria apropriado gerar uma exceção NotImplementedError se você ainda não substituiu um método em uma classe base (para satisfazer a "interface").
Uma verificação superficial no Google sugere que as pessoas entenderão o que você quer dizer se você usar a exceção dessa maneira. Não há efeitos colaterais ou conseqüências não intencionais que eu saiba; o método simplesmente lançará uma exceção se for chamado, e lançará uma exceção que será bem compreendida por todos.
A documentação do Python 3 reflete esse uso exato:
fonte
Isso será entendido, se você faz ou não, deve depender das convenções locais (equipe ou empresa). Observe que faz menos sentido no contexto do TDD, pois o TEST deve ser o que determina que o método não está implementado.
A versão curta é: use se você e sua equipe considerarem apropriado.
fonte
Parece que
NotImplementedError
geralmente está sendo gerado para o desenvolvimento de recursos do Python, como o seguinte:Documetation
Fonte
Collections.Counter.fromkeys
fonte