您可以在__init__
异常类型中引发异常,就像您可以在任何类型中一样__init__
。然而,这将阻止对象被创建——而是抛出异常。
所以你的原始raise Error()
文件根本不会被调用,你想在那里创建的异常对象永远不会被创建。相反,您只会得到一个异常,因为您创建的对象 ( Error
) 无法创建。
raise
所以你丢失了关于你想要执行的实际的所有信息。
因此,不,不要那样做。
无论如何,这似乎也是一种非常奇怪的方式来处理异常类型。异常对象本身不应该依赖于任何外部因素,并且some stuff
在这里看起来确实很神奇。您实际上想在这里解决什么?
可能有助于理解的方法是这样写raise Error()
:
e = Error()
raise e
因此,您首先创建一个异常对象,然后才真正引发它。所以在__init__
那个类型的里面,你不能再加注它,因为它还没有被加注过。但是无论如何都没有必要重新加注,因为你之后仍然在加注。再说一遍:你想做什么?您是否希望异常对象本身能够在某些条件下防止引发(因此pass
在您的代码中)?
更新
这是因为我在我的 Exception 类中附加了一些特殊方法,这些方法根据传递给异常的参数来格式化要打印的错误消息。
__init__
这根本不能证明在类型中引发异常是合理的。您可以轻松地格式化您想要的所有异常消息,而无需在类本身中引发异常。例如:
>>> class Error (Exception):
def __init__ (self, msg, rightAligned = False, spacedOut = False):
if spacedOut:
msg = ' '.join(msg)
if rightAligned:
msg = msg.rjust(72)
Exception.__init__(self, msg)
>>> raise Error('Random message')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
raise Error('Random message')
Error: Random message
>>> raise Error('Random message', True)
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
raise Error('Random message', True)
Error: Random message
>>> raise Error('Random message', False, True)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
raise Error('Random message', False, True)
Error: R a n d o m m e s s a g e
如您所见,我可以以任何我想要的方式更改异常消息,而无需在类中引发异常。