Python:新的 RangeError 异常应该从 Exception 类还是 ValueError 类派生?
我想为我的Python模块创建一个新的错误类型:RangeError。当一个值超出预期范围时,我会返回这个错误。
我有个问题:我应该按照Python文档的建议,从Exception类派生这个新错误,还是从ValueError类派生(我觉得这样更合理)?
这两种选择各有什么好处和坏处?如果我从ValueError类派生,会不会影响未来的开发?
(注意,这个错误不是处理索引超出范围的问题,因为那已经由IndexError处理了。)
谢谢,
1 个回答
2
如果 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
>>>
所以,只有在以下情况下你才应该让 RangeError
继承自 ValueError
:
RangeError
是一种特定的ValueError
。换句话说,它是对ValueError
的进一步分类,就像ZeroDivisionError
是对ArithmeticError
的分类一样。你希望人们可以通过捕捉
ValueError
来处理RangeError
。
否则,你应该让 RangeError
继承自 Exception
,因为:
RangeError
不是一种特定的ValueError
。RangeError
不应该通过捕捉ValueError
来处理。相反,用户应该明确地使用except RangeError:
来处理它。