Вызов исключений, когда исключение уже присутствует в Python 3

Что происходит с моим первым исключением ( 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

Вопросы

  1. Куда делось мое первое исключение?
  2. Почему может быть перехвачено только самое внешнее исключение?
  3. Как мне отсечь самое внешнее исключение и повторно вызвать более ранние исключения?

Update0

Этот вопрос конкретно касается Python 3 , так как его обработка исключений сильно отличается от Python 2.

38
задан Matt Joiner 10 June 2011 в 05:23
поделиться