擅长:python、mysql、java
<p>您可以在异常类型的<code>__init__</code>中引发异常,就像在任何类型的<code>__init__</code>中一样。但是这将阻止创建对象,而是引发异常。在</p>
<p>因此,您原来的<code>raise Error()</code>根本不会被调用,而且您要在其中创建的异常对象也永远不会被创建。相反,您只会得到一个异常,因为您创建的对象(<code>Error</code>)无法创建。在</p>
<p>因此,您将丢失有关实际要执行的<code>raise</code>的所有信息。在</p>
<p>因此,不,不要那样做。在</p>
<p>无论如何,这似乎也是一种非常奇怪的方法来处理异常类型。异常对象本身不应该依赖于任何外部因素,而且<code>some stuff</code>在这里看起来确实很神奇。你到底想解决什么问题?在</p>
<p>写下你的<code>raise Error()</code>可能有助于理解:</p>
<pre><code>e = Error()
raise e
</code></pre>
<p>因此,首先创建一个异常对象,然后才真正地将其提升。因此在该类型的<code>__init__</code>中,您不能<em>重新调用它,因为它还没有被引发过。不过,反正也没必要重估,因为事后你还在养呢。再说一遍:你想做什么?是否希望异常对象本身能够在特定条件下阻止引发(因此在代码中出现<code>pass</code>)?在</p>
<h2>更新</h2>
<blockquote>
<p>it is because I've attached some special methods to my Exception class, which format the error message to be printed depending of what parameters are passed to the exception.</p>
</blockquote>
<p>这根本没有理由在类型为<em>的<code>__init__</code>中引发异常。您可以随意格式化异常消息,而不必在类本身中引发异常。例如:</p>
^{pr2}$
<p>如您所见,我可以以任何方式更改异常消息,而不必在类中引发异常。在</p>