Ветка on
Ветка on используется в конструкции
try-catch для перехвата
исключений конкретного типа. В первом параметре
указывается тип исключения, которое нужно
поймать, во втором - имя переменной, в которую
будет записан объект исключения. Если тип
исключения совпадает с указанным, выполняется
соответствующий блок кода. Веток on
может быть несколько - тогда обрабатываются
разные типы исключений по отдельности.
Синтаксис
try {
// код, который может вызвать исключение
} on ExceptionType catch (e) {
// обработка исключения
}
Пример
Давайте перехватим исключение типа
FormatException при попытке
преобразовать строку в число:
void main()
{
try {
int.parse('abcde');
} on FormatException catch (e) {
print('Caught: ${e.message}');
}
}
Результат выполнения кода:
"Caught: Invalid radix-10 number (at character 1)
abcde
^
"
Пример
Давайте используем несколько веток on
для обработки разных типов исключений:
void main()
{
try {
List<int> res = [1, 2, 3];
print(res[5]);
} on RangeError catch (e) {
print('Range error: ${e.message}');
} on FormatException catch (e) {
print('Format error: ${e.message}');
}
}
Результат выполнения кода:
"Range error: Index out of range"
Пример
Давайте перехватим исключение типа
RangeError при обращении к элементу
списка по несуществующему индексу:
void main()
{
try {
List<int> res = [1, 2, 3];
print(res[10]);
} on RangeError catch (e) {
print('Caught RangeError');
}
}
Результат выполнения кода:
"Caught RangeError"