Оценок пока нет Исключения в языке Dart

Ваш код Dart может генерировать и ловить исключения. Исключением являются ошибки, указывающие на то, что произошло что-то неожиданное. Если исключение не обнаружено, изолятор, вызвавший исключение, приостанавливается, и обычно изолят и его программа завершаются.

В отличие от Java, все исключения Dart являются непроверенными исключениями. Методы не объявляют, какие исключения они могут генерировать, и вы не обязаны перехватывать какие-либо исключения.

Dart предоставляет типы Exception и Error, а также множество предопределенных подтипов. Вы можете, конечно, определить свои собственные исключения. Тем не менее, программы Dart могут выбрасывать любой ненулевой объект — не только объекты Exception и Error — в качестве исключения.

Throw

Вот пример выброса или повышения риска исключения:

throw FormatException('Expected at least 1 section');

Вы также можете бросать произвольные объекты:

throw 'Out of llamas!';
Примечание. Код производственного качества обычно генерирует типы, в которых реализована ошибка Error или исключение Exception.

Поскольку генерирование исключения является выражением, вы можете генерировать исключения в операторах =>, а также в любом другом месте, где разрешены выражения:

void distanceTo(Point other) => throw UnimplementedError();
Catch

Поймать или захватить исключение останавливает распространение исключения (если вы не сбросите исключение). Поймать исключение дает вам возможность обработать это:

try {
  breedMoreLlamas();
} on OutOfLlamasException {
  buyMoreLlamas();
}

Для обработки кода, который может генерировать более одного типа исключений, вы можете указать несколько предложений catch. Первое предложение catch, соответствующее типу брошенного объекта, обрабатывает исключение. Если в предложении catch не указан тип, это предложение может обрабатывать любой тип брошенного объекта:

try {
  breedMoreLlamas();
} on OutOfLlamasException {
  // A specific exception
  buyMoreLlamas();
} on Exception catch (e) {
  // Anything else that is an exception
  print('Unknown exception: $e');
} catch (e) {
  // No specified type, handles all
  print('Something really unknown: $e');
}

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

Вы можете указать один или два параметра для catch(). Первое — это исключение, а второе — трассировка стека (объект StackTrace).

try {
  // ···
} on Exception catch (e) {
  print('Exception details:\n $e');
} catch (e, s) {
  print('Exception details:\n $e');
  print('Stack trace:\n $s');
}

Чтобы частично обработать исключение и разрешить его распространение, используйте ключевое слово rethrow

void misbehave() {
  try {
    dynamic foo = true;
    print(foo++); // Runtime error
  } catch (e) {
    print('misbehave() partially handled ${e.runtimeType}.');
    rethrow; // Allow callers to see the exception.
  }
}

void main() {
  try {
    misbehave();
  } catch (e) {
    print('main() finished handling ${e.runtimeType}.');
  }
}
Finally

Чтобы убедиться, что какой-то код выполняется независимо от того, было ли выброшено исключение, используйте предложение finally. Если ни одно предложение catch не соответствует исключению, исключение распространяется после выполнения предложения finally:

try {
  breedMoreLlamas();
} finally {
  // Always clean up, even if an exception is thrown.
  cleanLlamaStalls();
}

Предложение finally запускается после любых соответствующих предложений catch:

try {
  breedMoreLlamas();
} catch (e) {
  print('Error: $e'); // Handle the exception first.
} finally {
  cleanLlamaStalls(); // Then clean up.
}

Узнайте больше, прочитав раздел «Исключения» в туре по библиотеке.

Пожалуйста, оцените материал

WebSofter

Web - технологии