It's because __lt__()
and related comparison methods is 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 expression a == b
, if a.__eq__(b)
returns NotImplemented
, then Python tries b.__eq__(a)
. If b
knows enough to return True
or False
, 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 !=
)."