Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtPmExTh 370 of 412 menu
◀ ▶

Выбрасывание исключения в Dart

Оператор throw создает исключение и немедленно прерывает текущий участок кода. Управление ищет подходящий catch выше по стеку вызовов. Если его нет, программа завершается с сообщением об ошибке.

throw ArgumentError("message");

В учебных задачах удобно создавать готовые типы платформы. Исключение ArgumentError подходит, когда параметр нарушает правило:

void requireEven(int n) { if (n % 2 != 0) { throw ArgumentError("even only"); } print(n); } try { requireEven(3); } on ArgumentError catch (e) { print("rejected"); }

Исключение UnsupportedError можно создать явно, если деление на ноль проверяют вручную до оператора ~/:

int safeDiv(int a, int b) { if (b == 0) { throw UnsupportedError('division by zero'); } return a ~/ b; } try { print(safeDiv(8, 0)); } on UnsupportedError catch (e) { print("cannot divide"); }

Текст ошибки доступен через e.toString() в блоке catch. Сообщения в коде пишите на английском, как и имена переменных.

Иногда сбой обрабатывают частично и передают дальше. Команда rethrow повторно отправляет то же исключение из текущего catch:

try { print(int.parse("x")); } on FormatException catch (e) { print("logged"); rethrow; }

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

Создайте функцию printIfPositive с параметром n. Для n <= 0 создайте ArgumentError с сообщением "not positive". Иначе выведите n.

Вызовите функцию printIfPositive с отрицательным числом внутри защищенного блока. При ArgumentError выведите текст из объекта исключения.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить