J'aime générer un NotImplementedError
pour toute 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()
parce que 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 lever un NotImplementedError
simplement pour indiquer que cette partie de l'API est un travail en cours? Sinon, existe-t-il une manière standardisée différente d'indiquer cela?
Il convient de noter que, bien que 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").
ne vérification rapide sur Google suggère que les gens comprendront ce que vous voulez dire si vous utilisez l'exception de cette façon. 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.
documentation for Python 3 reflète cette utilisation exacte:
Dans les classes de base définies par l'utilisateur, les méthodes abstraites doivent lever cette exception lorsqu'elles nécessitent que les classes dérivées remplacent la méthode, ou lorsque la classe est en cours de développement pour indiquer que l'implémentation réelle doit encore être ajoutée . [Italiques ajoutés]
Cela sera compris, que vous le fassiez ou non, cela dépendra 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é.
Il semble que NotImplementedError
soit généralement levé pour Python développe les fonctionnalités lui-même, comme suit:
@classmethod
def fromkeys(cls, iterable, v=None):
# There is no equivalent method for counters because setting v=1
# means that no element can have a count greater than one.
raise NotImplementedError(
'Counter.fromkeys() is undefined. Use Counter(iterable) instead.')
fromkeys (itérable)
Cette méthode de classe n'est pas implémentée pour les objets Counter.