物体不在正确的状态;哪个例外是合适的?

时间:2011-09-21 20:04:36

标签: python exception

说我有一个

class Rocket(object):
    def __init__(self):
        self.ready = False

    def prepare_for_takeoff(self):
        self.ready = True

    def takeoff(self):
        if not self.ready:
            raise NotReadyException("not ready!")
        print("Liftoff!")

现在,哪个standard exceptions最适合从NotReadyException派生?它是ValueError,因为self的状态/值有错误吗?

2 个答案:

答案 0 :(得分:6)

  

现在,哪个标准异常最适合从?

派生NotReadyException

Exception

不要乱用别的东西。

http://code.google.com/p/soc/wiki/PythonStyleGuide#Exceptions

您的异常处理用例是什么?

如果从ValueError中派生出例外,您是否会编写一个使用except ValueError:来捕获异常并以完全相同的方式处理它们的处理程序?不太可能。

当更具体的例外情况不合适时,

ValueError是一个包罗万象。你的例外很具体。

当你有这样的特定于应用程序的异常时,它与内置异常共享任何有用语义的几率很低。将新的和现有的异常实际组合到单个处理程序中的几率非常非常低。

关于您将特定于应用程序的异常与一般异常组合的唯一时间是在某些全能记录器中使用except Exception:

答案 1 :(得分:2)

我只是从Exception派生出来。抓住ValueError的程序员可能会非常惊讶他们也抓住了NotReadyException

如果您将定义许多类似的与状态相关的异常,并且能够捕获所有异常将很方便,您可以定义StateError异常,然后派生{{1}从那起。