Как обрабатывать множественные исключения - PullRequest
1 голос
/ 12 апреля 2019

Если у меня есть код, который вызывает больше исключений, как это

class A(Exception): pass
class B(Exception): pass

try:
    try:
        raise A('first')
    finally:
        raise B('second')
except X as c:
    print(c)

Есть ли способ обработать все исключения вместе?

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Вы можете справиться со всеми этими способами:

except (A, B) as c:

Также вы можете определить свой собственный базовый класс для ваших исключений:

class BaseCustomException(Exception): pass
class A(BaseCustomException): pass
class B(BaseCustomException): pass

После того, как вы можете поймать базовое исключение, оно охватит все производные исключения:

except BaseCustomException as c:
0 голосов
/ 12 апреля 2019

Когда новое исключение выдается в блоке перехвата или блоке finally, который будет распространяться из этого блока, то текущее исключение будет отменено (и забыто), поскольку новое исключение распространяется наружу. Новое исключение начинает разматывать стек точно так же, как и любое другое исключение, прерывая работу из текущего блока (блока catch или finally) и подвергая его воздействию любых применимых блоков catch или finally.

check: Исключение, брошенное в catch, и, наконец, пункт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...