首页 文章

为什么返回NotImplemented而不是引发NotImplementedError

提问于
浏览
207

Python有一个名为NotImplemented的单例 .

为什么有人想要返回 NotImplemented 而不是提高NotImplementedError例外?难道它不会让查找错误变得更难,例如执行无效方法的代码吗?

4 回答

  • 218

    Because they have different use cases.

    引用文档(Python 3.6):

    NotImplemented

    应该由二进制特殊方法(例如__eq (), lt (), add (), rsub __()等)返回,以指示操作未针对其他类型实现

    exception NotImplementedError

    [...]在用户定义的基类中,抽象方法应该在需要派生类重写方法时,或者在开发类时指示仍需要添加实际实现时引发此异常 .

    请参阅链接了解详细信息 .

  • 8

    一个原因是表现 . 在丰富的比较情况下,您可以在短时间内进行大量操作,设置和处理大量异常可能比简单地返回 NotImplemented 值花费更长的时间 .

  • 42

    这是因为 __lt__() 和相关的比较方法在列表排序等中间接使用 . 有时算法会选择尝试其他方式或选择默认赢家 . 除非被捕获,否则引发异常将突破排序,而 NotImplemented 不会被提升并可用于进一步的测试 .

    http://jcalderone.livejournal.com/32837.html

    总结一下这个链接:

    “NotImplemented向运行时发出信号,它应该让其他人满足该操作 . 在表达式a == b中,如果.__ eq (b)返回NotImplemented,则Python尝试b . eq __(a) . 如果b知道足够的话要返回True或False,那么表达式就可以成功 . 如果没有,那么运行时将回退到内置行为(基于==和!=的标识) . “

  • -5

    有些函数会引发异常,而函数则不会引发后者......它实际上取决于程序员/设计 . 这就是为什么他们都在那里使用 .

相关问题