假设我有一个
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
有错误的状态/值吗?在
我只是从}。在
Exception
得到它。捕捉ValueError
的程序员可能会很惊讶他们也会捕捉到你的{如果您将定义许多与状态相关的类似类型的异常,并且能够捕获所有异常会很方便,那么您可以定义一个
StateError
异常,然后从中派生出NotReadyException
。在Exception
别乱动其他东西。在
http://code.google.com/p/soc/wiki/PythonStyleGuide#Exceptions
处理你的例外情况是什么?在
如果您的异常是从
ValueError
派生的,那么您是否曾经编写过一个使用except ValueError:
捕获两个异常并以完全相同的方式处理它们的处理程序?不太可能。在当更具体的异常不合适时,
ValueError
是一个包罗万象的东西。你的例外是非常具体的。在当您有这样一个特定于应用程序的异常时,它与内置异常共享任何有用语义的可能性很低。实际将新异常和现有异常合并到单个处理程序中的可能性非常非常低。在
将应用程序特定的异常与泛型异常结合起来的唯一方法是在某些catch all logger中使用
except Exception:
。在相关问题 更多 >
编程相关推荐