J'aime soulever un NotImplementedError
pour n'importe quelle méthode que je veux implémenter, mais où je n'ai pas encore réussi à le faire. J'ai peut-être déjà une implémentation partielle, mais ajoutez-la avec raise NotImplementedError()
car je ne l'aime pas encore. D'un autre côté, j'aime aussi m'en tenir aux conventions, car cela facilitera la maintenance de mon code par d'autres personnes, et les conventions peuvent exister pour une bonne raison.
Cependant, la documentation Pythons pour NotImplementedError indique:
Cette exception est dérivée de RuntimeError. Dans les classes de base définies par l'utilisateur, les méthodes abstraites doivent déclencher cette exception lorsqu'elles nécessitent que les classes dérivées remplacent la méthode.
Il s'agit d'un cas d'utilisation formel beaucoup plus spécifique que celui que je décris. Est-ce un bon style conventionnel de soulever un NotImplementedError
simplement pour indiquer que cette partie de l'API est un travail en cours? Sinon, existe-t-il une autre manière standardisée de l'indiquer?
Réponses:
Il convient de noter que, si la documentation Python fournit un cas d'utilisation (et probablement canonique) pour cette exception, elle n'exclut pas spécifiquement son utilisation dans d'autres scénarios.
Je considérerais approprié de déclencher une exception NotImplementedError si vous n'avez pas encore remplacé une méthode dans une classe de base (pour satisfaire l '"interface").
Une vérification rapide sur Google suggère que les gens comprendront ce que vous voulez dire si vous utilisez l'exception de cette manière. Il n'y a aucun effet secondaire ou conséquence involontaire à ma connaissance; la méthode lèvera simplement une exception si elle est appelée, et elle lèvera une exception bien comprise par tout le monde.
La documentation de Python 3 reflète cette utilisation exacte:
la source
Cela sera compris, que vous le fassiez ou non, cela devrait dépendre des conventions locales (équipe ou entreprise). Notez que cela a moins de sens dans le contexte de TDD car le TEST devrait être ce qui détermine que la méthode n'est pas implémentée.
La version courte est: à utiliser si vous et votre équipe le jugez approprié.
la source
Il semble que cela
NotImplementedError
soit généralement soulevé pour les développements de fonctionnalités Python lui-même, comme suit:Documetation
La source
Collections.Counter.fromkeys
la source