РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
446 of 723 menu

Оператор rethrow

Оператор rethrow используется внутри блока catch для повторного выбрасывания пойманного исключения. В отличие от оператора throw, который создает новое исключение, rethrow сохраняет исходный объект исключения и его трассировку стека. Это позволяет обработать ошибку частично (например, залогировать ее) и передать дальше наверх по стеку вызовов без потери информации о месте возникновения.

Оператор rethrow не принимает параметров и может использоваться только внутри блока catch. Если попытаться вызвать его вне этого блока, компилятор выдаст ошибку.

Синтаксис

try { // code that may throw } catch (e) { // some handling rethrow; }

Пример

Давайте поймаем исключение, залогируем его и повторно выбросим с помощью rethrow:

void main() { try { try { throw FormatException('bad format'); } catch (e) { print('Caught: $e'); rethrow; } } catch (e) { print('Outer caught: $e'); } }

Результат выполнения кода:

"Caught: FormatException: bad format" "Outer caught: FormatException: bad format"

Пример

Давайте сравним поведение rethrow и throw. При использовании throw исходная трассировка стека теряется, а при rethrow - сохраняется:

void main() { try { validate(-1); } catch (e, stackTrace) { print('Error: $e'); print('Stack trace contains validate: ${stackTrace.toString().contains('validate')}'); } } void validate(int value) { try { if (value < 0) { throw ArgumentError('value must be positive'); } } catch (e) { rethrow; } }

Результат выполнения кода:

"Error: Invalid argument(s): value must be positive" "Stack trace contains validate: true"

Смотрите также

  • оператор throw,
    который выбрасывает новое исключение
  • конструкция catch,
    которая ловит исключения
  • конструкция try,
    которая задает блок кода для отслеживания
  • класс StackTrace,
    который хранит трассировку стека
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить