======Raise====== Возбуждает указанное исключение. Инструкция позволяет прервать штатный поток исполнения при помощи возбуждения исключения. Если после инструкции отсутствует выражение (например, не указывается тип исключения), то повторно поднимается отловленное исключение. Если в данной области нет активного исключения (например, raise не находится внутри блока except), возбуждается TypeError try: # Допустим в функции поднимается FileNotFoundError. do() except OSError: # Инструкция raise без выражения поднимет FileNotFoundError повторно. raise Если выражение присутствует, то результатом его вычисления должен являться либо экземпляр наследника **BaseException**, либо сам наследник, то есть тип. Во втором случае объект исключения будет сформирован путём инстанциирования типа без аргументов. # Объект сформируется из класса автоматически. raise MyException # Формируем объект исключения вручную. raise MyException('Моё исключение') ====Объект трассировки---- Объект трассировки обычно создаётся автоматически при возбуждении исключения и подвязывается к нему в атрибут **__traceback__** (поддерживает запись). Вы можете в один приём создать исключение и подвязать к нему трассировку при помощи метода исключения **with_traceback()** — метод вернёт тот же объект исключения для которого вызван: raise Exception('Возбуждено исключение').with_traceback(traceback_obj) ====Цепочки исключений==== Для формирования цепочек исключений используется дополнение from, после которого требуется указать ещё одно исключение (класс, либо объект). Это исключение будет подвязано к возбуждаемому в атрибут **__cause__** (поддерживает запись). В результате, если возбуждаемое исключение не обработано, но на вывод будут отправлены оба исключения: try: print(1 / 0) except Exception as exc: # Наше второе исключение никто не поймает # поэтому будет выведена цепочка # из двух исключений. raise RuntimeError('Явная цепочка исключений') from exc Похожий механизм срабатывает автоматически, если исключение возбуждается внутри обработчика, либо блока **finally** — предыдущее исключение подвязывается в атрибут **__context__** нового: try: print(1 / 0) except: raise RuntimeError('Неявная цепочка исключений') Автоматическое формирование цепочки можно подавить, указав **None** после **from**. В ходе данной операции задействуется атрибут **__suppress_context__**.