对象的状态不正确;哪个异常是合适的?

2024-09-30 02:28:50 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个

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有错误的状态/值吗?在


Tags: selffalsetrueforifobjectinitdef
2条回答

我只是从Exception得到它。捕捉ValueError的程序员可能会很惊讶他们也会捕捉到你的{}。在

如果您将定义许多与状态相关的类似类型的异常,并且能够捕获所有异常会很方便,那么您可以定义一个StateError异常,然后从中派生出NotReadyException。在

Now, which of the standard exceptions would be most appropriate to derive NotReadyException from?

Exception

别乱动其他东西。在

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

处理你的例外情况是什么?在

如果您的异常是从ValueError派生的,那么您是否曾经编写过一个使用except ValueError:捕获两个异常并以完全相同的方式处理它们的处理程序?不太可能。在

当更具体的异常不合适时,ValueError是一个包罗万象的东西。你的例外是非常具体的。在

当您有这样一个特定于应用程序的异常时,它与内置异常共享任何有用语义的可能性很低。实际将新异常和现有异常合并到单个处理程序中的可能性非常非常低。在

将应用程序特定的异常与泛型异常结合起来的唯一方法是在某些catch all logger中使用except Exception:。在

相关问题 更多 >

    热门问题