Java 的 UnsupportedOperationException 的 Python 等价物是啥?

Posted

技术标签:

【中文标题】Java 的 UnsupportedOperationException 的 Python 等价物是啥?【英文标题】: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 这是看待它的好方法。我想我可以在错误消息中解释为什么该方法没有实现。 【参考方案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 似乎是一个合适的选择。

【讨论】:

以上是关于Java 的 UnsupportedOperationException 的 Python 等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Java - 35 Java 实例

JAVA是啥意思

java笔试要点(java.sql包)

Java_核心基础概念

java是啥?

推介一个学习JAVA的系列教程-狗鱼IT教程