Python tem um singleton chamado NotImplemented
.
Por que alguém iria querer voltar em NotImplemented
vez de criar a NotImplementedError
exceção? Não apenas tornará mais difícil encontrar erros, como código que executa métodos inválidos?
Python tem um singleton chamado NotImplemented
.
Por que alguém iria querer voltar em NotImplemented
vez de criar a NotImplementedError
exceção? Não apenas tornará mais difícil encontrar erros, como código que executa métodos inválidos?
É porque __lt__()
métodos de comparação relacionados são comumente usados indiretamente em tipos de lista e coisas do tipo. Às vezes, o algoritmo decide tentar de outra maneira ou escolher um vencedor padrão. Gerar uma exceção seria diferente, a menos que detectado, enquanto NotImplemented
não é gerado e pode ser usado em outros testes.
http://jcalderone.livejournal.com/32837.html
Para resumir esse link:
"
NotImplemented
sinaliza ao tempo de execução que ele deve solicitar a outra pessoa que satisfaça a operação. Na expressãoa == b
, sea.__eq__(b)
retornaNotImplemented
, o Python tentab.__eq__(a)
. Seb
souber o suficiente para retornarTrue
ouFalse
, a expressão poderá ser bem-sucedida. Se não, o tempo de execução será voltar ao comportamento interno (que é baseado na identidade para==
e!=
). "
a.__eq__(b)
NotImplemented retornado, ele não poderia facilmente capturar o NotImplementedError (e chamarb.__eq__(a)
ou o que quer que seja)?Porque eles têm diferentes casos de uso.
Citando os documentos (Python 3.6):
Não implementado
exceção NotImplementedError
Veja os links para detalhes.
fonte
Um dos motivos é o desempenho. Em uma situação como comparações ricas, em que você pode realizar muitas operações em pouco tempo, configurar e manipular muitas exceções pode levar muito mais tempo do que simplesmente retornar um
NotImplemented
valor.fonte