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
有一个抛出 UnsupportedOperationException
的 add
方法,而 Python 的 frozenset
只是没有 add
方法。我们这里没有严格的interface
s,所以我们不需要一堆虚拟方法来匹配接口定义的内容。
@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 等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章