Типы исключений в Dart
У каждого исключения есть тип. В блоке catch
после on указывают именно тип, чтобы
реагировать на конкретную проблему. Ниже -
типы, которые чаще всего встречаются в начальных
задачах.
Исключение FormatException возникает, когда
строку нельзя преобразовать в число. Так бывает
после int.parse для текста вроде "abc":
var raw = "12x";
try {
print(int.parse(raw));
} on FormatException catch (e) {
print("invalid number");
}
Исключение UnsupportedError
связано с целочисленным делением на ноль через
оператор ~/:
var x = 10;
var y = 0;
try {
print(x ~/ y);
} on UnsupportedError catch (e) {
print("bad division");
}
Ошибка RangeError появляется при обращении
к элементу списка или строки по индексу вне
допустимого диапазона:
var items = ["a", "b", "c"];
try {
print(items[5]);
} on RangeError catch (e) {
print("no such index");
}
Исключение ArgumentError сигнализирует,
что аргумент функции не подходит по смыслу.
Его часто создают сами, когда значение нарушает
правило задачи:
void printPositive(int n) {
if (n <= 0) {
throw ArgumentError("need positive");
}
print(n);
}
try {
printPositive(-1);
} on ArgumentError catch (e) {
print("bad argument");
}
В одном блоке catch после on
указывают один тип. Если нужно по-разному
реагировать на разные сбои, добавляют несколько
блоков catch - это разберем в следующем
уроке.
Дана строка input. Получите из нее целое
число через int.parse. При
FormatException выведите "format".
Даны numerator и denominator.
Вычислите частное через ~/. При
UnsupportedError выведите
"math".