是否可以让异常在其自己的类实例中引发自己? 像这样:
class Error(Exception):
def __init__(self):
if some stuff:
pass
elif some other stuff:
# re-raise myself
raise Error()
我试图使用raise self
,但它返回一个错误;而且,我没有看到异常类的任何属性似乎与此链接。在
编辑
如果我想这样做,那是因为我在Exception
类中附加了一些特殊的方法,这些方法根据传递给异常的参数来格式化要打印的错误消息。我本可以在一个单独的对象中完成格式化工作,但是由于它只被异常使用,所以我觉得很自然地将它附加到异常类本身。在
这可能会解决您当前的错误:
然而,你有无限递归的潜力。如果“其他的东西”总是真的呢?在
编辑:不应接受此答案。poke's answer解决问题的核心并给出正确的解决方案。在
自我提高的课程对我来说似乎很管用:
我不是Python语言导出程序,所以这可能是一些奇怪的半中止类,它本身的行为不是很好。当心清空者。在
尖锐的问题是:你为什么要这样做?有什么原因不想使用标准的Python习惯用法在构造异常之后显式地引发异常吗?在
您可以在异常类型的
__init__
中引发异常,就像在任何类型的__init__
中一样。但是这将阻止创建对象,而是引发异常。在因此,您原来的
raise Error()
根本不会被调用,而且您要在其中创建的异常对象也永远不会被创建。相反,您只会得到一个异常,因为您创建的对象(Error
)无法创建。在因此,您将丢失有关实际要执行的
raise
的所有信息。在因此,不,不要那样做。在
无论如何,这似乎也是一种非常奇怪的方法来处理异常类型。异常对象本身不应该依赖于任何外部因素,而且
some stuff
在这里看起来确实很神奇。你到底想解决什么问题?在写下你的
raise Error()
可能有助于理解:因此,首先创建一个异常对象,然后才真正地将其提升。因此在该类型的
__init__
中,您不能重新调用它,因为它还没有被引发过。不过,反正也没必要重估,因为事后你还在养呢。再说一遍:你想做什么?是否希望异常对象本身能够在特定条件下阻止引发(因此在代码中出现pass
)?在更新
这根本没有理由在类型为的
^{pr2}$__init__
中引发异常。您可以随意格式化异常消息,而不必在类本身中引发异常。例如:如您所见,我可以以任何方式更改异常消息,而不必在类中引发异常。在
相关问题 更多 >
编程相关推荐