Учебники

Программирование дротиков — исключения

Исключение (или исключительное событие) — это проблема, возникающая во время выполнения программы. Когда возникает исключение, нормальный поток программы прерывается, и программа / приложение ненормально завершается.

Встроенные исключения 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 содержит код для обработки этого исключения.

Live Demo

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 содержит объект исключения, выданный во время выполнения.

Live Demo

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try {  
      res = x ~/ y; 
   }  
   catch(e) { 
      print(e); 
   } 
} 

Он должен произвести следующий вывод

IntegerDivisionByZeroException

Пример: на… поймать

В следующем примере показано, как использовать блок on … catch .

Live Demo

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 .

Live Demo

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 для исключения:

Live Demo

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 
} 

Пользовательские исключения должны создаваться явно, и то же самое должно обрабатываться в коде.

пример

В следующем примере показано, как определить и обработать пользовательское исключение.

Live Demo

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 .

Код должен выдать следующий вывод: