It’s because __lt__()
and related comparison methods are quite commonly used indirectly in list sorts and such. Sometimes the algorithm will choose to try another way or pick a default winner. Raising an exception would break out of the sort unless caught, whereas NotImplemented
doesn’t get raised and can be used in further tests.
http://jcalderone.livejournal.com/32837.html
To summarise that link:
“
NotImplemented
signals to the runtime that it should ask someone else to satisfy the operation. In the expressiona == b
, ifa.__eq__(b)
returnsNotImplemented
, then Python triesb.__eq__(a)
. Ifb
knows enough to returnTrue
orFalse
, then the expression can succeed. If it doesn’t, then the runtime will fall back to the built-in behavior (which is based on identity for==
and!=
).”