为什么返回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知道的足够多返回TrueFalse,则表达式可以成功。如果没有,那么运行时将退回到内置行为(这是基于身份==!=)“。