【发布时间】:2021-02-11 19:14:14
【问题描述】:
如果我定义自己的异常
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,但是异常处理好像不太一致。
【问题讨论】:
-
问题在于你提出了什么,而不是你
except。显示minimal reproducible example 以获得更好的答案。另外,请记住,如果B是A的子类,那么B是A,但A不是B