代码之家  ›  专栏  ›  技术社区  ›  abyx

为什么返回NotImplementeder而不是引发NotImplementeder错误

  •  212
  • abyx  · 技术社区  · 15 年前

    python有一个名为 NotImplemented .

    为什么会有人想要回来 无刺激的 而不是提高 NotImplementedError 例外?这会不会使查找错误变得更加困难,例如执行无效方法的代码?

    4 回复  |  直到 7 年前
        1
  •  226
  •   user davidism    8 年前

    那是因为 __lt__() 而相关的比较方法在列表排序等中也很常用。有时算法会选择尝试其他方法或选择默认的赢家。除非被抓住,否则引发一个异常就会发生。 NotImplemented 不会被提升,可以用于进一步的测试。

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

    要总结该链接,请执行以下操作:

    无刺激的 向运行时发出信号,要求其他人满足该操作。在表达式中 a == b 如果 a.__eq__(b) 收益率 无刺激的 ,然后python尝试 b.__eq__(a) . 如果 b 有足够的知识返回 True False ,则表达式可以成功。如果没有,那么运行时将返回到内置行为(它基于 == !=

        2
  •  51
  •   Paolo Sparker73    7 年前

    因为它们有不同的用例。

    引用文档(python 3.6):

    NotImplemented

    应通过二进制特殊方法(例如 __eq__() , __lt__() , __add__() , __rsub__() 等),以指示该操作未针对其他类型实现。

    exception NotImplementedError

    用户定义基中的[…] 类,抽象方法在 需要派生类来重写方法,或者当类是 正在开发,以表明真正的实施仍然需要 需要补充。

    有关详细信息,请参阅链接。

        3
  •  8
  •   RichieHindle    7 年前

    一个原因是性能。在富比较这样的情况下,您可以在短时间内执行大量操作,设置和处理大量异常可能比简单返回 NotImplemented 价值。

        4
  •  -6
  •   Jason Coon    15 年前

    有些函数会引发异常,而有些函数则不会, return NotImplemented 可能是后者……这真的取决于程序员/设计。这就是为什么它们都可以使用的原因。