Fehlerbehandlung
Möglicherweise sind Sie in früheren Kapiteln bereits auf den Begriff Laufzeitfehler gestoßen. Ein Laufzeitfehler ist ein Fehler, der während der Programmausführung auftritt – daher der Name "Laufzeit"fehler.
In der Regel führt ein Laufzeitfehler dazu, dass das Programm abstürzt oder nicht mehr reagiert.
Der Compiler kann die meisten Fehler im Code erkennen, aber Laufzeitfehler sind meist unvorhersehbar und hängen oft von unsicheren Parametern ab.
Wenn zum Beispiel der an StreamReader
übergebene Dateipfad ungültig ist oder nicht existiert, tritt ein Laufzeitfehler auf und das Programm stürzt ab. Daher kann man solchen riskanten Code häufig in try-catch
-Blöcke setzen, um den Code auszuprobieren und im Fehlerfall den Fehler abzufangen und zu behandeln, anstatt das Programm abstürzen zu lassen.
Nachfolgend die Syntax des try-catch
-Blocks:
index.cs
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Hier ist Exception
ein Schlüsselwort, das den Datentyp Exception repräsentiert.
Beispiel
index.cs
1234567891011121314151617using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Der Teil (Exception error)
kann in der catch
-Anweisung weggelassen werden, wenn error
nicht verwendet wird.
Im Folgenden sind einige häufige Fälle aufgeführt, in denen ein Laufzeitfehler auftreten kann:
Division durch Null
index.cs
123456789101112131415161718using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }
Ungültiger Index eines Arrays oder einer Liste
index.cs
1234567891011121314151617using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }
Schlüssel nicht gefunden (bei Dictionaries):
index.cs
123456789101112131415161718192021using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }
Der finally-Block
Es gibt auch einen optionalen Codeblock namens finally
, der nach Ausführung des catch
-Blocks ausgeführt wird:
index.cs
12345678910111213141516171819202122232425using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }
1. Was ist die Ausgabe des folgenden Programms?
2. Welchen Zweck hat der finally
-Block in C#?
3. Welche der folgenden Aussagen trifft auf den try-catch
-Block in C# zu?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Can you explain how the try-catch block works with an example?
What are some best practices for handling runtime errors?
Can you list other common runtime errors besides the ones mentioned?
Awesome!
Completion rate improved to 2.04
Fehlerbehandlung
Swipe um das Menü anzuzeigen
Möglicherweise sind Sie in früheren Kapiteln bereits auf den Begriff Laufzeitfehler gestoßen. Ein Laufzeitfehler ist ein Fehler, der während der Programmausführung auftritt – daher der Name "Laufzeit"fehler.
In der Regel führt ein Laufzeitfehler dazu, dass das Programm abstürzt oder nicht mehr reagiert.
Der Compiler kann die meisten Fehler im Code erkennen, aber Laufzeitfehler sind meist unvorhersehbar und hängen oft von unsicheren Parametern ab.
Wenn zum Beispiel der an StreamReader
übergebene Dateipfad ungültig ist oder nicht existiert, tritt ein Laufzeitfehler auf und das Programm stürzt ab. Daher kann man solchen riskanten Code häufig in try-catch
-Blöcke setzen, um den Code auszuprobieren und im Fehlerfall den Fehler abzufangen und zu behandeln, anstatt das Programm abstürzen zu lassen.
Nachfolgend die Syntax des try-catch
-Blocks:
index.cs
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Hier ist Exception
ein Schlüsselwort, das den Datentyp Exception repräsentiert.
Beispiel
index.cs
1234567891011121314151617using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Der Teil (Exception error)
kann in der catch
-Anweisung weggelassen werden, wenn error
nicht verwendet wird.
Im Folgenden sind einige häufige Fälle aufgeführt, in denen ein Laufzeitfehler auftreten kann:
Division durch Null
index.cs
123456789101112131415161718using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }
Ungültiger Index eines Arrays oder einer Liste
index.cs
1234567891011121314151617using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }
Schlüssel nicht gefunden (bei Dictionaries):
index.cs
123456789101112131415161718192021using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }
Der finally-Block
Es gibt auch einen optionalen Codeblock namens finally
, der nach Ausführung des catch
-Blocks ausgeführt wird:
index.cs
12345678910111213141516171819202122232425using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }
1. Was ist die Ausgabe des folgenden Programms?
2. Welchen Zweck hat der finally
-Block in C#?
3. Welche der folgenden Aussagen trifft auf den try-catch
-Block in C# zu?
Danke für Ihr Feedback!