Что произойдет с моим первым исключением (A
), когда второй (B
) поднят в следующем коде?
class A(Exception): pass
class B(Exception): pass
try:
try:
raise A('first')
finally:
raise B('second')
except X as c:
print(c)
Если вы используете X = A
, я получаю:
Traceback (most recent call last): File "raising_more_exceptions.py", line 6, in raise A('first') __main__.A: first During handling of the above exception, another exception occurred: Traceback (most recent call last): File "raising_more_exceptions.py", line 8, in raise B('second') __main__.B: second
Но если X = B
, я получаю:
second
Вопросы
- Где мое первое исключение отправилось?
- Почему только внешнее исключение доступно?
- Как отключить внешнее исключение и сделать ререйз более ранними исключениями?
Update0
В этом вопросе конкретно рассматривается Python 3, поскольку его обработка исключений сильно отличается от Python 2.