Мне нравится поднимать NotImplementedError
для любого метода, который я хочу реализовать, но там, где я еще не удосужился сделать это. Возможно, у меня уже есть частичная реализация, но добавьте ее, raise NotImplementedError()
потому что она мне пока не нравится. С другой стороны, мне также нравится придерживаться соглашений, потому что это облегчит другим людям поддержку моего кода, и соглашения могут существовать по уважительной причине.
Однако документация Pythons для NotImplementedError гласит:
Это исключение происходит от RuntimeError. В определяемых пользователем базовых классах абстрактные методы должны вызывать это исключение, когда им требуются производные классы для переопределения метода.
Это гораздо более конкретный, формальный вариант использования, чем тот, который я описал. Это хороший, традиционный стиль, чтобы NotImplementedError
просто указать, что эта часть API находится в стадии разработки? Если нет, есть ли другой стандартизированный способ указания этого?
Ответы:
Стоит отметить, что, хотя документация Python предоставляет вариант использования (и, возможно, канонический) для этого исключения, это не исключает его использования в других сценариях.
Я считаю целесообразным вызвать исключение NotImplementedError, если вы еще не переопределили метод в базовом классе (для удовлетворения «интерфейса»).
Краткая проверка в Google показывает, что люди поймут, что вы имеете в виду, если вы будете использовать исключение таким образом. Там нет никаких побочных эффектов или непреднамеренных последствий, о которых я знаю; метод просто сгенерирует исключение, если он вызывается, и сгенерирует исключение, которое всем хорошо понятно.
Документация для Python 3 отражает это точное использование:
источник
Это будет понятно, независимо от того, будете ли вы это делать или нет, должно зависеть от местных соглашений (команды или компании). Обратите внимание, что это имеет меньше смысла в контексте TDD, поскольку TEST должен определять, что метод не реализован.
Краткая версия: используйте, если вы и ваша команда считаете это целесообразным.
источник
Кажется, что
NotImplementedError
это обычно поднимается для разработки функций самого Python, например:Documetation
Источник
Collections.Counter.fromkeys
источник