【问题标题】:What is the Python equivalent of Java's UnsupportedOperationException?Java 的 UnsupportedOperationException 的 Python 等价物是什么?
【发布时间】:2016-10-30 05:11:12
【问题描述】:

我正在查看 Python 的 built-in exceptions 并想知道与 Java 的 UnsupportedOperationException 最接近的等价物是什么。 NotImplementedError 很接近,但似乎暗示了一些稍微不同的东西。我应该使用RuntimeError 还是实现我自己的Exception

【问题讨论】:

  • 我会说他们的意思是一样的,用不同的词。不支持是因为没有实现,不支持是因为不支持。这仅取决于您的观点,即意图。
  • @Andreas 这是看待它的好方法。我想我可以在错误消息中解释为什么该方法没有实现。

标签: java python exception custom-exceptions


【解决方案1】:

最接近的等价物是根本不实现不受支持的方法。如果您尝试使用不存在的方法,则生成的异常是 AttributeError

【讨论】:

  • @gotnull:因为它回答了问题。
  • 我想定义方法并拥有一个只是 raise <some_exception> 的主体,并在异常消息中解释为什么不应实施/支持该方法。恐怕如果我不这样做,将来有人可能会尝试实现该方法,而不会理解为什么最初没有实现它。
  • @erwaman 所以请提出AttributeError。或者,如果您愿意,也可以提出您自己的自定义异常类型。
  • @erwaman:这可能是 Java 的方式,但在 Python 中并不常见。例如,Java 的 Collections.unmodifiableSet 有一个抛出 UnsupportedOperationExceptionadd 方法,而 Python 的 frozenset 只是没有 add 方法。我们这里没有严格的interfaces,所以我们不需要一堆虚拟方法来匹配接口定义的内容。
  • @user2357112。使用@ABC.abstractmethod 你/我们在 Python 中有一些僵化。如果从父类C 继承的类不会实现抽象方法M,您将得到:TypeError: Can't instantiate abstract class X with abstract methodsM
【解决方案2】:

我不了解 Java,但看看您链接到的内容(以及一些在线示例),我会说没有单一的等价物。这是对异常类型的相当宽泛的描述。

如果由于操作数的类型错误而不支持该操作,您将使用 TypeError。如果由于值以某种方式不兼容而不受支持,您将使用 ValueError。或者,正如 user2357112 所指出的,当您尝试访问不存在的方法时,您将什么都不做并得到一个 AttributeError。

【讨论】:

    【解决方案3】:

    根据 Python 文档页面,NotImplementedError 似乎是一个合适的选择。

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 2011-04-12
      • 2011-01-04
      • 2011-04-13
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 2011-03-07
      相关资源
      最近更新 更多