为什么没有捕获多父父异常?

时间:2018-05-02 14:10:21

标签: python exception

我玩弄了一个异常层次结构并意识到了这一点 没有抓住几个父母的异常子类。

例如:

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!

为什么没有捕获多父异常?

2 个答案:

答案 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。另请注意,父类对子类没有任何了解,因此,在提升Error1Error2时,您使用该特定类中的__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'