我玩弄了一个异常层次结构并意识到了这一点 没有抓住几个父母的异常子类。
例如:
class Error1(Exception):
pass
class Error2(Exception):
pass
class MixedError(Error1, Error2):
pass
try:
print('before 1')
raise Error2()
print('after 1')
except MixedError:
print('Caught it with a mixin 1!')
except Exception:
print('Big catcher here 1!')
打印:
之前1
大捕手1!
为什么没有捕获多父异常?
答案 0 :(得分:3)
您误解了exceptions
的工作原理。父异常缓存异常,而不是子异常:
class Error1(Exception):
pass
class Error2(Exception):
pass
class MixedError(Error1, Error2):
pass
try:
print('before 1')
raise MixedError()
print('after 1')
except Error2:
print('Caught it with a Error2!')
except Exception:
print('Big catcher here 1!')
打印:
before 1
Caught it with a Error2!
答案 1 :(得分:1)
你永远不会举起MixedError
。另请注意,父类对子类没有任何了解,因此,在提升Error1
或Error2
时,您使用该特定类中的__str__
引发错误:
class Error1(Exception):
pass
class Error2(Exception):
pass
class MixedError(Error1, Error2):
pass
try:
raise MixedError('Error here')
except MixedError:
print("caught 'MixedError'")
输出:
caught 'MixedError'