我想为我的Python模块创建一个新的异常:RangeError。当值超出预期范围时,我会返回此错误。
我的问题是:我应该从Exception类派生新错误(如Python文档所建议的那样),还是应该从ValueError类派生它(这对我来说更有意义)?
一种选择或另一种选择有哪些好处和缺点?如果我从ValueError类派生出来,我是否会破坏未来的发展?
(请注意,这不适用于索引超出范围,因为它已经由IndexError处理。)
谢谢,
答案 0 :(得分:1)
如果RangeError
继承自ValueError
,那么您可以通过捕捉ValueError
来抓住它:
>>> class RangeError(ValueError):
... pass
...
>>> try:
... raise RangeError
... except ValueError:
... print("handler for ValueError")
...
handler for ValueError
>>>
>>> try:
... raise RangeError
... except ValueError:
... print("handler for ValueError")
... except RangeError: # Ignored because except ValueError: was reached first
... print("handler for RangeError")
...
handler for ValueError
>>>
因此,您应该只从ValueError
if:
RangeError
是一种特定的ValueError
。换句话说,它是后者的进一步分类,就像ZeroDivisionError
ArithmeticError
一样。
您希望人们能够通过捕捉RangeError
来抓住ValueError
。
否则,您应该继承Exception
,因为:
RangeError
不特定种类ValueError
。
RangeError
应该抓住ValueError
。相反,用户应该通过except RangeError:
明确处理它。