У Python есть синглтон NotImplemented
.
Почему кто-то хотел бы когда-нибудь вернуться NotImplemented
вместо того, чтобы поднять NotImplementedError
исключение? Разве это не затруднит поиск ошибок, таких как код, выполняющий недопустимые методы?
У Python есть синглтон NotImplemented
.
Почему кто-то хотел бы когда-нибудь вернуться NotImplemented
вместо того, чтобы поднять NotImplementedError
исключение? Разве это не затруднит поиск ошибок, таких как код, выполняющий недопустимые методы?
Это потому, что __lt__()
и связанные методы сравнения довольно часто используются косвенно в списках и тому подобное. Иногда алгоритм может выбрать другой способ или выбрать победителя по умолчанию. Возбуждение исключения вырвалось бы из рода, если оно не было поймано, тогда NotImplemented
как не вызывается и может использоваться в дальнейших тестах
http://jcalderone.livejournal.com/32837.html
Подводя итог этой ссылке:
"
NotImplemented
сигнализирует среде выполнения, что он должен попросить кого-то другого выполнить операцию. В выраженииa == b
, еслиa.__eq__(b)
возвращаетсяNotImplemented
, то Python пытаетсяb.__eq__(a)
. Еслиb
знает достаточно для возвратаTrue
илиFalse
, тогда выражение может завершиться успешно. Если это не так, тогда среда выполнения будет отступить к встроенному поведению (которое основано на идентичности для==
и!=
). "
a.__eq__(b)
возвращен ли NotImplemented, не может ли он так же легко перехватить NotImplementedError вместо этого (и затем вызватьb.__eq__(a)
или что-то еще)?Потому что у них разные варианты использования.
Цитирование документов (Python 3.6):
Не реализована
исключение NotImplementedError
Смотрите ссылки для деталей.
источник
Одной из причин является производительность. В такой ситуации, как расширенные сравнения, когда вы могли бы выполнить много операций за короткое время, настройка и обработка большого числа исключений может занять гораздо больше времени, чем просто возвращение
NotImplemented
значения.источник