根据给定的协议(我无法更改,只实现),某些函数initialize_foo()
应该只被调用一次:
def initialize_foo():
"""
...
Note:
You must call this function exactly once.
"""
我想识别一个被调用两次的协议滥用,并引发异常:
_foo_initialized = False
def initialize_foo():
"""
...
Note:
You must call this function exactly once.
"""
if _foo_initialized:
raise <what>?
...
_foo_initialized = True
问题是班级要提出的问题。看standard exceptions,除了Exception
之外,我找不到任何子类,这似乎太笼统了。
这种情况下的一般做法是什么?
答案 0 :(得分:2)
我使用RuntimeError
。
它通常用于那种东西,即使在标准库中也是如此。您可以在warnings
module中找到与您的用例非常相似的示例:
if self._entered:
raise RuntimeError("Cannot enter %r twice" % self)
另一个例子是threading
:
if self._started.is_set():
raise RuntimeError("threads can only be started once")
您还可以考虑提出一个特殊的异常(可能是RuntimeError
的子类),如果该错误应该被捕获,并且您认为RuntimeError
可能不明确。
答案 1 :(得分:1)
我建议你继承 warning ,而不是有例外,因为我觉得很多时候你宁愿继续运行。< / p>