Ich möchte eine NotImplementedError
für jede Methode, die ich implementieren möchte, aber wo ich noch nicht dazu gekommen bin, erhöhen . Möglicherweise habe ich bereits eine teilweise Implementierung, stelle sie jedoch voran, raise NotImplementedError()
da sie mir noch nicht gefällt. Auf der anderen Seite halte ich mich auch gerne an Konventionen, weil dies anderen Leuten die Pflege meines Codes erleichtert und Konventionen aus gutem Grund existieren können.
In der Pythons-Dokumentation für NotImplementedError heißt es jedoch:
Diese Ausnahme wird von RuntimeError abgeleitet. In benutzerdefinierten Basisklassen sollten abstrakte Methoden diese Ausnahme auslösen, wenn abgeleitete Klassen zum Überschreiben der Methode erforderlich sind.
Das ist ein viel spezifischerer formaler Anwendungsfall als der, den ich beschreibe. Ist es ein guter, konventioneller Stil, ein zu erheben, NotImplementedError
um anzuzeigen, dass dieser Teil der API in Arbeit ist? Wenn nicht, gibt es eine andere standardisierte Möglichkeit, dies anzuzeigen?
Antworten:
Es ist erwähnenswert, dass die Python-Dokumentation zwar einen Anwendungsfall (und wahrscheinlich den kanonischen) für diese Ausnahme enthält, ihre Verwendung in anderen Szenarien jedoch nicht ausdrücklich ausschließt.
Ich würde es für angemessen halten, eine NotImplementedError-Ausnahme auszulösen, wenn Sie eine Methode in einer Basisklasse noch nicht überschrieben haben (um die "Schnittstelle" zu erfüllen).
Eine flüchtige Überprüfung bei Google legt nahe, dass die Nutzer verstehen, was Sie meinen, wenn Sie die Ausnahme auf diese Weise verwenden. Es gibt keine Nebenwirkungen oder unbeabsichtigten Konsequenzen, von denen ich weiß; Die Methode löst einfach eine Ausnahme aus, wenn sie aufgerufen wird, und löst eine Ausnahme aus, die von allen gut verstanden wird.
Die Dokumentation für Python 3 spiegelt genau diese Verwendung wider:
quelle
Dies wird verstanden, ob Sie dies tun oder nicht, sollte von lokalen Konventionen (Team- oder Firmenkonventionen) abhängen. Beachten Sie, dass dies im Zusammenhang mit TDD weniger sinnvoll ist, da der TEST bestimmen sollte, dass die Methode nicht implementiert ist.
Die Kurzversion lautet: Verwenden Sie, wenn Sie und Ihr Team dies für angemessen halten.
quelle
Es scheint, dass
NotImplementedError
in der Regel für Python-Feature-Entwicklungen selbst ausgelöst wird, wie die folgenden:Dokumentation
Quelle
Collections.Counter.fromkeys
quelle