Dart-Programmierung - Ausnahmen

Eine Ausnahme (oder ein außergewöhnliches Ereignis) ist ein Problem, das während der Ausführung eines Programms auftritt. Wenn eine Ausnahme auftritt, wird der normale Programmfluss unterbrochen und das Programm / die Anwendung wird abnormal beendet.

Eingebaute Dart-Ausnahmen umfassen -

Sr.Nr. Ausnahmen & Beschreibung
1

DeferredLoadException

Wird ausgelöst, wenn eine zurückgestellte Bibliothek nicht geladen werden kann.

2

FormatException

Ausnahme ausgelöst, wenn eine Zeichenfolge oder andere Daten kein erwartetes Format haben und nicht analysiert oder verarbeitet werden können.

3

IntegerDivisionByZeroException

Wird geworfen, wenn eine Zahl durch Null geteilt wird.

4

IOException

Basisklasse für alle Inupt-Output-bezogenen Ausnahmen.

5

IsolateSpawnException

Wird ausgelöst, wenn kein Isolat erstellt werden kann.

6

Timeout

Wird ausgelöst, wenn eine geplante Zeitüberschreitung auftritt, während auf ein asynchrones Ergebnis gewartet wird.

Jede Ausnahme in Dart ist ein Subtyp der vordefinierten Klasse Exception. Ausnahmen müssen behandelt werden, um zu verhindern, dass die Anwendung abrupt beendet wird.

Die Try / On / Catch-Blöcke

Das tryBlock bettet Code ein, der möglicherweise zu einer Ausnahme führen kann. Der Ein-Block wird verwendet, wenn der Ausnahmetyp angegeben werden muss. Dascatch Block wird verwendet, wenn der Handler das Ausnahmeobjekt benötigt.

Das try Auf den Block muss entweder genau einer folgen on / catch Block oder eins finallyBlock (oder einer von beiden). Wenn im try-Block eine Ausnahme auftritt, wird das Steuerelement an den übertragencatch.

Das syntax für die Behandlung einer Ausnahme ist wie unten angegeben -

try { 
   // code that might throw an exception 
}  
on Exception1 { 
   // code for handling exception 
}  
catch Exception2 { 
   // code for handling exception 
}

Im Folgenden sind einige Punkte aufgeführt, an die Sie sich erinnern sollten:

  • Ein Code-Snippet kann mehr als einen Ein / Fang-Block enthalten, um mehrere Ausnahmen zu behandeln.

  • Der Ein-Block und der Catch-Block schließen sich gegenseitig ein, dh ein Try-Block kann sowohl dem On-Block als auch dem Catch-Block zugeordnet werden.

Der folgende Code veranschaulicht die Ausnahmebehandlung in Dart -

Beispiel: Verwenden des ON-Blocks

Das folgende Programm teilt zwei Zahlen, die durch die Variablen dargestellt werden x und ybeziehungsweise. Der Code löst eine Ausnahme aus, da er versucht, durch Null zu teilen. Dason block enthält den Code zur Behandlung dieser Ausnahme.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try {
      res = x ~/ y; 
   } 
   on IntegerDivisionByZeroException { 
      print('Cannot divide by zero'); 
   } 
}

Es sollte Folgendes erzeugen output - -

Cannot divide by zero

Beispiel: Verwenden des catch-Blocks

Im folgenden Beispiel haben wir denselben Code wie oben verwendet. Der einzige Unterschied ist, dass diecatch block(anstelle des ON-Blocks) enthält hier den Code zur Behandlung der Ausnahme. Der Parameter voncatch enthält das zur Laufzeit ausgelöste Ausnahmeobjekt.

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

Es sollte Folgendes erzeugen output - -

IntegerDivisionByZeroException

Beispiel: on… catch

Das folgende Beispiel zeigt die Verwendung von on...catch Block.

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

Es sollte Folgendes erzeugen output - -

IntegerDivisionByZeroException

Der endgültige Block

Das finallyDer Block enthält Code, der unabhängig vom Auftreten einer Ausnahme ausgeführt werden soll. Die Wahlfinally Block wird bedingungslos nach ausgeführt try/on/catch.

Die Syntax für die Verwendung von finally Block ist wie folgt -

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 
}

Das folgende Beispiel veranschaulicht die Verwendung von finally Block.

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'); 
   } 
}

Es sollte Folgendes erzeugen output - -

Cannot divide by zero 
Finally block executed

Eine Ausnahme auslösen

Das throwDas Schlüsselwort wird verwendet, um eine Ausnahme explizit auszulösen. Eine ausgelöste Ausnahme sollte behandelt werden, um zu verhindern, dass das Programm abrupt beendet wird.

Das syntax für die explizite Auslösung einer Ausnahme ist -

throw new Exception_name()

Beispiel

Das folgende Beispiel zeigt die Verwendung von throw Schlüsselwort, um eine Ausnahme auszulösen -

main() { 
   try { 
      test_age(-2); 
   } 
   catch(e) { 
      print('Age cannot be negative'); 
   } 
}  
void test_age(int age) { 
   if(age<0) { 
      throw new FormatException(); 
   } 
}

Es sollte Folgendes erzeugen output - -

Age cannot be negative

Benutzerdefinierte Ausnahmen

Wie oben angegeben, ist jeder Ausnahmetyp in Dart ein Subtyp der integrierten Klasse Exception. Mit Dart können Sie benutzerdefinierte Ausnahmen erstellen, indem Sie die vorhandenen erweitern. Die Syntax zum Definieren einer benutzerdefinierten Ausnahme lautet wie folgt:

Syntax: Definition der Ausnahme

class Custom_exception_Name implements Exception { 
   // can contain constructors, variables and methods 
}

Benutzerdefinierte Ausnahmen sollten explizit ausgelöst und im Code behandelt werden.

Beispiel

Das folgende Beispiel zeigt, wie eine benutzerdefinierte Ausnahme definiert und behandelt wird.

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(); 
   } 
}

Im obigen Code definieren wir eine benutzerdefinierte Ausnahme. AmtException. Der Code löst die Ausnahme aus, wenn der übergebene Betrag nicht im Ausnahmebereich liegt. Dasmain Funktion schließt den Funktionsaufruf in die ein try...catch Block.

Der Code sollte Folgendes erzeugen output - -

Amount should be greater than zero 
Ending requested operation....