Исключение (или исключительное событие) — это проблема, возникающая во время выполнения программы. Когда возникает исключение, нормальный поток программы прерывается, и программа / приложение ненормально завершается.
Встроенные исключения Dart включают —
Sr.No | Исключения и описание |
---|---|
1 |
DeferredLoadException Выдается, когда не удается загрузить отложенную библиотеку. |
2 |
FormatException Исключение выдается, когда строка или некоторые другие данные не имеют ожидаемого формата и не могут быть проанализированы или обработаны. |
3 |
IntegerDivisionByZeroException Брошенный, когда число делится на ноль. |
4 |
IOException Базовый класс для всех исключений, связанных с Inupt-Output. |
5 |
IsolateSpawnException Брошенный, когда изолят не может быть создан. |
6 |
Тайм — аут Брошенный, когда запланированный тайм-аут случается, ожидая асинхронного результата. |
DeferredLoadException
Выдается, когда не удается загрузить отложенную библиотеку.
FormatException
Исключение выдается, когда строка или некоторые другие данные не имеют ожидаемого формата и не могут быть проанализированы или обработаны.
IntegerDivisionByZeroException
Брошенный, когда число делится на ноль.
IOException
Базовый класс для всех исключений, связанных с Inupt-Output.
IsolateSpawnException
Брошенный, когда изолят не может быть создан.
Тайм — аут
Брошенный, когда запланированный тайм-аут случается, ожидая асинхронного результата.
Каждое исключение в Dart является подтипом предопределенного класса Exception . Исключения должны быть обработаны, чтобы предотвратить внезапное завершение приложения.
Блоки try / on / catch
Блок try встраивает код, который может привести к исключению. Блок on используется, когда необходимо указать тип исключения. Блок catch используется, когда обработчику нужен объект исключения.
За блоком try должен следовать либо один блок on / catch, либо один блок finally (или один из обоих). Когда в блоке try возникает исключение, управление передается в catch .
Синтаксис для обработки исключения приведен ниже.
try { // code that might throw an exception } on Exception1 { // code for handling exception } catch Exception2 { // code for handling exception }
Ниже приведены некоторые моменты, которые следует помнить —
-
Фрагмент кода может иметь более одного блока on / catch для обработки нескольких исключений.
-
Блок on и блок catch являются взаимоисключающими, то есть блок try может быть связан как с блоком on, так и с блоком catch.
Фрагмент кода может иметь более одного блока on / catch для обработки нескольких исключений.
Блок on и блок catch являются взаимоисключающими, то есть блок try может быть связан как с блоком on, так и с блоком catch.
Следующий код иллюстрирует обработку исключений в Dart —
Пример: использование блока ON
Следующая программа делит два числа, представленные переменными x и y соответственно. Код генерирует исключение, так как он пытается делить на ноль. Блок on содержит код для обработки этого исключения.
main() { int x = 12; int y = 0; int res; try { res = x ~/ y; } on IntegerDivisionByZeroException { print('Cannot divide by zero'); } }
Он должен произвести следующий вывод —
Cannot divide by zero
Пример: использование блока catch
В следующем примере мы использовали тот же код, что и выше. Единственное отличие состоит в том, что блок catch (вместо блока ON) здесь содержит код для обработки исключения. Параметр catch содержит объект исключения, выданный во время выполнения.
main() { int x = 12; int y = 0; int res; try { res = x ~/ y; } catch(e) { print(e); } }
Он должен произвести следующий вывод —
IntegerDivisionByZeroException
Пример: на… поймать
В следующем примере показано, как использовать блок on … catch .
main() { int x = 12; int y = 0; int res; try { res = x ~/ y; } on IntegerDivisionByZeroException catch(e) { print(e); } }
Он должен произвести следующий вывод —
IntegerDivisionByZeroException
Последний блок
Блок finally включает в себя код, который должен выполняться независимо от возникновения исключения. Необязательный блок finally выполняется безоговорочно после try / on / catch .
Синтаксис для использования блока finally таков:
try { // code that might throw an exception } on Exception1 { // exception handling code } catch Exception2 { // exception handling } finally { // code that should always execute; irrespective of the exception }
Следующий пример иллюстрирует использование блока finally .
main() { int x = 12; int y = 0; int res; try { res = x ~/ y; } on IntegerDivisionByZeroException { print('Cannot divide by zero'); } finally { print('Finally block executed'); } }
Он должен произвести следующий вывод —
Cannot divide by zero Finally block executed
Бросать исключение
Ключевое слово throw используется для явного вызова исключения. Возникшее исключение должно быть обработано, чтобы предотвратить внезапный выход из программы.
Синтаксис для явного вызова исключения —
throw new Exception_name()
пример
В следующем примере показано, как использовать ключевое слово throw для исключения:
main() { try { test_age(-2); } catch(e) { print('Age cannot be negative'); } } void test_age(int age) { if(age<0) { throw new FormatException(); } }
Он должен произвести следующий вывод —
Age cannot be negative
Пользовательские исключения
Как указано выше, каждый тип исключения в Dart является подтипом встроенного класса Exception . Dart позволяет создавать пользовательские исключения, расширяя существующие. Синтаксис для определения пользовательского исключения приведен ниже.
Синтаксис: определение исключения
class Custom_exception_Name implements Exception { // can contain constructors, variables and methods }
Пользовательские исключения должны создаваться явно, и то же самое должно обрабатываться в коде.
пример
В следующем примере показано, как определить и обработать пользовательское исключение.
class AmtException implements Exception { String errMsg() => 'Amount should be greater than zero'; } void main() { try { withdraw_amt(-1); } catch(e) { print(e.errMsg()); } finally { print('Ending requested operation.....'); } } void withdraw_amt(int amt) { if (amt <= 0) { throw new AmtException(); } }
В приведенном выше коде мы определяем пользовательское исключение AmtException . Код вызывает исключение, если переданная сумма находится за пределами допустимого диапазона. Основная функция включает вызов функции в блоке try … catch .
Код должен выдать следующий вывод: