Ветка catch
Ветка catch является частью конструкции
try-catch и предназначена для перехвата
исключений, которые могут возникнуть при выполнении
кода в блоке try. Когда в блоке try
происходит ошибка, управление передается в ветку
catch. В круглых скобках ветка catch
принимает объект исключения, который можно
использовать для анализа ошибки. Также можно
указать второй параметр - объект StackTrace,
содержащий информацию о стеке вызовов в момент
возникновения исключения.
Синтаксис
try {
// code that might throw an exception
} catch (e, stackTrace) {
// handle the exception
}
Пример
Давайте попробуем преобразовать строку в число,
которая не является числом. Это вызовет исключение
FormatException, которое мы перехватим
в ветке catch:
void main()
{
try {
int.parse('abcde');
} catch (e) {
print('Caught an exception: $e');
}
}
Результат выполнения кода:
"Caught an exception: FormatException: Invalid radix-10 number (at character 1)
abcde
^"
Пример
Давайте перехватим исключение и выведем информацию
о стеке вызовов, используя второй параметр
ветки catch:
void main()
{
try {
int.parse('12345abcde');
} catch (e, stackTrace) {
print('Exception: $e');
print('Stack trace: $stackTrace');
}
}
Результат выполнения кода:
"Exception: FormatException: Invalid radix-10 number (at character 6)
12345abcde
^
Stack trace: #0 int.parse (dart:core)
#1 main (file:///path/to/your/file.dart:4:11)
#2 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:307:17)
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)"
Пример
Давайте используем ветку catch для обработки
разных типов исключений, проверяя их тип через
оператор is:
void main()
{
try {
List<int> numbers = [1, 2, 3];
print(numbers[10]);
} catch (e) {
if (e is RangeError) {
print('Range error occurred: $e');
} else {
print('Another error: $e');
}
}
}
Результат выполнения кода:
"Range error occurred: RangeError (index): Invalid value: Not in inclusive range 0..2: 10"
Смотрите также
-
ключевое слово
try,
которое определяет блок кода для проверки на исключения -
ключевое слово
on,
которое позволяет перехватывать исключения конкретного типа -
ключевое слово
finally,
которое выполняет код независимо от возникновения исключения -
ключевое слово
throw,
которое используется для генерации исключения