Übung: Implementieren der try-catch-Ausnahmebehandlung

Abgeschlossen

Das try-catch Muster besteht aus einem try Block gefolgt von einer oder catch mehreren Klauseln. Jede catch Klausel gibt den Handler für einen anderen Ausnahmetyp an.

Wenn eine Ausnahme ausgelöst wird, sucht die Common Language Runtime (CLR) nach einer catch Klausel, die die Ausnahme verarbeiten kann. Wenn die derzeit ausgeführte Methode keine Klausel enthält catch , die den ausgelösten Ausnahmetyp verarbeiten kann, durchsucht die CLR die Methode, die die aktuelle Methode aufgerufen hat. Die Suche wird durch den Aufrufstapel fortgesetzt, bis eine geeignete catch Klausel gefunden wird. Wenn keine catch Klausel gefunden wird, um die Ausnahme zu behandeln, zeigt die CLR dem Benutzer eine unbehandelte Ausnahmemeldung an und beendet die Ausführung des Programms.

In dieser Übung implementieren Sie ein einfaches try-catch Muster.

Erstellen eines neuen Codeprojekts

Der erste Schritt besteht darin, ein Codeprojekt zu erstellen, das Sie während dieses Moduls verwenden.

  1. Öffnen Sie eine neue Instanz von Visual Studio Code.

  2. Wählen Sie im Menü "Datei " die Option "Ordner öffnen" aus.

  3. Navigieren Sie im Dialogfeld "Ordner öffnen " zu Ihrem Windows-Desktopordner .

  4. Wählen Sie im Dialogfeld "Ordner öffnen " die Option "Neuer Ordner" aus.

  5. Benennen Sie den neuen Ordner Exceptions101, und wählen Sie dann "Ordner auswählen" aus.

  6. Wählen Sie im Menü Terminal die Option New Terminal (Neues Terminal) aus.

    Sie verwenden einen .NET CLI-Befehl, um eine neue Konsolen-App zu erstellen.

  7. Geben Sie an der Eingabeaufforderung des TERMINALpanels die folgenden Befehle ein:

    dotnet new console
    
  8. Schließen Sie das Panel TERMINAL.

Implementieren eines einfachen try-catch-Musters

  1. Verwenden Sie die Visual Studio Code EXPLORER-Ansicht, um die Program.cs Datei zu öffnen.

  2. Wählen Sie im Menü "Ansicht" die Befehlspalette aus.

  3. Geben Sie an der Eingabeaufforderung .net: g ein, und wählen Sie dann .NET: Ressourcen für Build und Debug generieren.

  4. Ersetzen Sie den Inhalt der datei Program.cs durch den folgenden Code:

    double float1 = 3000.0;
    double float2 = 0.0;
    int number1 = 3000;
    int number2 = 0;
    
    Console.WriteLine(float1 / float2);
    Console.WriteLine(number1 / number2);
    Console.WriteLine("Exit program");
    
  5. Nehmen Sie sich einen Moment Zeit, um den Code zu untersuchen.

    Beachten Sie, dass die Anwendung zwei numerische Variablentypen, double und int, verwendet. Der Code führt eine Divisionsberechnung mit beiden numerischen Typen aus.

    Entwickler verwenden eine double Typvariable für Berechnungen, wenn präzise Bruchwerte wichtig sind.

  6. Wählen Sie im Menü "Ausführen " die Option "Debuggen starten" aus.

    Beachten Sie, dass beim Dividieren der ganzzahligen Werte eine DivideByZeroException Ausnahme auftritt.

    Hinweis

    Möglicherweise haben Sie bemerkt, dass die Formel, die Variablen des Typs double verwendet, abgeschlossen werden kann, ohne einen Fehler zu verursachen. Bei einer Division durch 0 mit Variablen des Typs double ist das Ergebnis positiv unendlich, negativ unendlich oder keine Zahl (Not a Number, NaN). Dies bedeutet nicht, dass Sie immer double-Typvariablen anstelle von int- oder decimal-Typen verwenden sollten. Der richtige Ansatz besteht darin, Variablen des geeigneten Typs zu verwenden und die Ausnahmebehandlung zu implementieren, um fehler zu erfassen, die auftreten können.

  7. Wählen Sie auf der Symbolleiste "Debuggen" die Option "Weiter" aus.

    Screenshot der Schaltfläche

  8. Nehmen Sie sich eine Minute Zeit, um die Nachrichtenausgabe für Ihre Anwendung zu untersuchen.

    ∞
    Unhandled exception. System.DivideByZeroException: Attempted to divide by zero.
       at Program.<Main>$(String[] args) in C:\Users\msuser\Desktop\Exceptions101\Program.cs:line 7
    

    Beachten Sie, dass die unbehandelte Ausnahme dazu geführt hat, dass die Anwendung nach Abschluss der ersten Console.WriteLine() Aussage beendet wurde.

    Hinweis

    Visual Studio Code verwendet standardmäßig einen anderen Farbtext, um vom Debugger generierte Nachrichten anzuzeigen. Dadurch kann der Entwickler zwischen Anwendungsausgabe- und Debuggermeldungen unterscheiden. Wenn Sie eine übersichtlichere Ansicht der Ausgabe Ihrer Anwendung wünschen, können Sie die launch.json Datei so konfigurieren, dass eine andere Konsole verwendet wird. Legen Sie beispielsweise console auf integratedTerminal fest, um das Panel TERMINAL für die Anwendungsausgabe zu verwenden. Debuggermeldungen werden immer im DEBUG CONSOLE-Bereich angezeigt.

  9. Schließen Sie die beiden Berechnungen im Codeblock einer try Anweisung wie folgt ein:

    double float1 = 3000.0;
    double float2 = 0.0;
    int number1 = 3000;
    int number2 = 0;
    
    try
    {
        Console.WriteLine(float1 / float2);
        Console.WriteLine(number1 / number2);
    }
    
    Console.WriteLine("Exit program");
    
  10. Beachten Sie die rote Wellenlinie unter der schließenden Klammer des try-Blocks.

    Für die C#-Syntax sind catch und finally Klauseln erforderlich, wenn Sie eine try Anweisung verwenden.

  11. Erstellen Sie einen catch Codeblock unter dem try Codeblock wie folgt:

    try
    {
        Console.WriteLine(float1 / float2);
        Console.WriteLine(number1 / number2);
    }
    catch
    {
        Console.WriteLine("An exception has been caught");
    }
    
  12. Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.

  13. Wählen Sie im Menü "Ausführen " die Option "Debuggen starten" aus.

  14. Nehmen Sie sich eine Minute Zeit, um die Ausgabe zu untersuchen, die Ihre Anwendung erstellt hat.

    ∞
    An exception has been caught
    Exit program
    
  15. Beachten Sie, dass ihre Anwendung die Ausführung der verbleibenden Codezeilen vor dem Schließen beenden kann, obwohl die Ausnahme weiterhin auftritt.

    Mit der Ausnahmebehandlung können Sie die Codeausführung steuern, wenn Ausnahmen auftreten. Die Ausnahmebehandlung trägt dazu bei, sicherzustellen, dass Ihr Code stabil ist und die erwarteten Ergebnisse erzeugt.

Abfangen von Ausnahmen, die in aufgerufenen Methoden ausgelöst werden

In vielen Fällen wird eine Ausnahme auf einer niedrigeren Ebene der Aufrufliste abgefangen als derjenigen, auf der sie ausgelöst wurde.

Wenn eine Ausnahme ausgelöst wird und die aktuelle Methode die Ausnahme nicht abfangen kann, löst die Common Language Runtime den Stapel ab und sucht nach einer Methode, die eine catch Klausel enthält, die die Ausnahme behandeln kann. Die erste gefundene catch Klausel, die die Ausnahme behandeln kann, wird ausgeführt werden. Wenn keine entsprechende Klausel an einer beliebigen catch Stelle im Aufrufstapel gefunden wird, beendet die Common Language Runtime den Prozess und zeigt dem Benutzer eine Fehlermeldung an.

  1. Ersetzen Sie den Code in Ihrer Program.cs-Datei durch den folgenden Code:

    try
    {
        Process1();
    }
    catch
    {
        Console.WriteLine("An exception has occurred");
    }
    
    Console.WriteLine("Exit program");
    
    static void Process1()
    {
        WriteMessage();
    }
    
    static void WriteMessage()
    {
        double float1 = 3000.0;
        double float2 = 0.0;
        int number1 = 3000;
        int number2 = 0;
    
        Console.WriteLine(float1 / float2);
        Console.WriteLine(number1 / number2);
    }
    
  2. Nehmen Sie sich eine Minute Zeit, um den aktualisierten Code zu überprüfen.

    • Die Anweisungen auf oberster Ebene enthalten den try Codeblock, der die Process1() Methode aufruft.
    • Die Process1() Methode ruft die WriteMessage() Methode auf.
    • Die WriteMessage() Methode enthält den Code, in dem die DivideByZeroException Ausnahme ausgelöst wird.

    Beachten Sie, dass die Ausnahme in einer Methode generiert wird, die zwei Aufrufstapelebenen über den try Blöcken und catch Codeblöcken befindet.

    Screenshot der Call-Stack-Ebenen zwischen dem Auslösen einer Ausnahme und ihrem Abfangen.

    Anweisungen auf oberster Ebene werden als Methode dargestellt, die im Aufrufstapel benannt ist Main .

  3. Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.

  4. Wählen Sie im Menü "Ausführen " die Option "Debuggen starten" aus.

  5. Nehmen Sie sich eine Minute Zeit, um die Ausgabe zu untersuchen, die Ihre Anwendung erstellt hat.

    ∞
    An exception has occurred
    Exit program
    
  6. Beachten Sie, dass die Ausnahme zwar zwei Ebenen höher im Aufrufstapel geworfen wird, aber dennoch erfolgreich verarbeitet wird.

Zusammenfassung

Nachstehend finden Sie nochmals die wichtigsten Punkte aus dieser Lerneinheit:

  • Implementieren Sie ein try-catch Muster für try angegebene Codezeilen innerhalb Ihrer Anwendung und catch Ausnahmen, die im Bereich des try Codeblocks auftreten.
  • Verwenden Sie eine catch Klausel, um eine Ausnahme abzufangen, die auf derselben Ebene des Aufrufstapels ausgelöst wird.
  • Verwenden Sie eine catch Klausel, um eine Ausnahme abzufangen, die auf einer höheren Ebene des Aufrufstapels ausgelöst wird.