擅长:python、mysql、java
<p>AppleError仍然是AppleError而不是BananaError,即使error_代码与之无关,因此陷入BananaError是没有意义的。在</p>
<p>您可以为不同的错误代码定义特定的错误:</p>
<pre><code>GRANNY_SMITH_ERROR = 1
MACINTOSH_ERROR = 2
class AppleError(Exception):
def __init__(self, error_code, *args):
super(AppleError, self).__init__(*args)
self.error_code = error_code
class GrannySmithError(AppleError):
def __init__(self, *args):
super(GrannySmithError, self).__init__(GRANNY_SMITH_ERROR, *args)
class MacintoshError(AppleError):
def __init__(self, *args):
super(MacintoshError, self).__init__(MACINTOSH_ERROR, *args)
</code></pre>
<p>然后您可以尝试匹配特定错误:</p>
^{pr2}$
<p>如果您不想区分不同类型的apple错误,您仍然可以捕获所有apple错误:</p>
<pre><code>try: raise MacintoshError()
except AppleError as exc: print("generic apple")
</code></pre>
<p>例如,您可以将这些组合起来,例如,只对Grannymith进行特殊处理,而不针对Macintosh:</p>
<pre><code>try: raise MacintoshError()
except GrannySmithError as exc: print("granny smith")
except AppleError as exc: print("generic apple")
</code></pre>
<p>重要的是列出从最具体到最不具体的错误。如果在grannymitherror之前测试AppleError,那么它永远不会进入grannymith块。在</p>