Python中与Java的UnsupportedOperationException相对应的是什么?

20

1
我认为它们的意思相同,只是用了不同的词语。它没有得到支持是因为它还没有被实现,而它没有被实现是因为它没有得到支持。这取决于你的观点,即意图。 - Andreas
@Andreas 这是一个很好的看法。我想我可以在错误信息中解释为什么该方法未被实现。 - erwaman
3个回答

15

最接近的相当于是不实现不支持的方法。如果您尝试使用不存在的方法,则会出现AttributeError异常。


3
因为它回答了这个问题。 - user2357112
1
我想定义一个方法,并且方法体只包含 raise <some_exception>,在异常信息中解释为什么该方法不应被实现/支持。我担心如果我不这样做,将来可能会有人尝试实现该方法而不理解为什么它最初没有被实现。 - erwaman
1
@erwaman 所以引发 AttributeError 异常。或者如果您愿意的话,可以引发自己定义的自定义异常类型。 - dimo414
1
@erwaman:这可能是Java的方式,但在Python中并不常见。例如,在Java的Collections.unmodifiableSet中有一个add方法会抛出UnsupportedOperationException,而Python的frozenset根本没有add方法。我们这里没有严格的“接口”,所以我们不需要一堆虚拟方法来匹配接口定义。 - user2357112
4
使用@ABC.abstractmethod,你/我们在Python中会遇到一些严格性。如果继承自父类C的类没有实现抽象方法M,则会出现错误:TypeError: Can't instantiate abstract class X with abstract methods M - dzieciou

9

2

我不懂Java,但看了你提供的链接和一些在线示例后,我认为没有单一的等效项。这是异常类型的相当广泛的描述。

如果操作由于操作数类型错误而不受支持,则应使用TypeError。如果它不受支持,因为值在某种程度上不兼容,则应使用ValueError。或者,如user2357112所指出的那样,您可以什么都不做,并在尝试访问不存在的方法时获得AttributeError。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接