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

Несколько блоков catch в Dart

В одном try может произойти сбой разного типа. Если указать в catch только один тип, остальные исключения не перехватятся и программа остановится.

Решение - несколько блоков catch подряд. Среда выполнения выбирает первый блок, тип которого подходит к возникшему исключению. Запишем общий вид:

try { // risky code } on FormatException catch (e) { // handle format } on UnsupportedError catch (e) { // handle division }

Функция ниже делит два числа, переданные строками. Ошибка преобразования и деление на ноль обрабатываются разными сообщениями:

void divideStrings(String a, String b) { try { var x = int.parse(a); var y = int.parse(b); print(x ~/ y); } on FormatException catch (e) { print("not a number"); } on UnsupportedError catch (e) { print("division by zero"); } } divideStrings("10", "0"); divideStrings("10", "two");

Более конкретный catch ставят выше общего. Если сначала написать широкий перехват без on, до узких типов выполнение может не дойти. В начальных задачах достаточно перечислять нужные типы по одному.

var data = [1, 2, 3]; var indexStr = "x"; try { var i = int.parse(indexStr); print(data[i]); } on FormatException catch (e) { print("bad index text"); } on RangeError catch (e) { print("bad index value"); }

Даны строки left и right. Преобразуйте обе в целые числа и выведите частное первого на второе через ~/. Для FormatException выведите "parse", для UnsupportedError выведите "zero".

Дан список и строка с индексом. Получите индекс и элемент списка в одной конструкции. Обработайте FormatException и RangeError разными сообщениями на английском.

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