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