如果我定义自己的例外
class AuthTokenExpired(Exception):
pass
class TokenNotInDatabase(Exception):
pass
class NoTokenInRequest(Exception):
pass
然后我可以通过说来抓住他们中的任何一个
try:
proc_that_raises()
except (AuthTokenExpired, TokenNotInDatabase, NoTokenInRequest):
handle_exception()
为了聪明,我创建了一个父异常类并从中派生所有这些
class TokenProblem(Exception):
pass
class AuthTokenExpired(TokenProblem):
pass
class TokenNotInDatabase(TokenProblem):
pass
class NoTokenInRequest(TokenProblem):
pass
如果我这样做,那么 except TokenProblem
不会在 TokenNotInDatabase 上触发。为什么这不起作用? TokenNotInDatabase 是一个TokenProblem,但是异常处理好像不太一致。
答案 0 :(得分:1)
以下是异常继承工作原理的简单演示:
>>> class TokenProblem(Exception):
... pass
...
>>> class AuthTokenExpired(TokenProblem):
... pass
...
>>> try:
... raise AuthTokenExpired()
... except TokenProblem:
... print("looks like I caught it")
...
looks like I caught it
也许在您的 proc_that_raises
中,您试图提升 AuthTokenExpired
(类)而不是它的实际实例?