Fehlerbehandlung | Baeldung zur Informatik (2023)

Letzte Aktualisierung:14. Dezember 2022

Fehlerbehandlung | Baeldung zur Informatik (1)

Geschrieben von:baeldung

(Video) Informatik 1 — Chapter #05 — Video #022 — Pattern Matching, Fehlerbehandlung: check-error, violation
  • Programmierung

    1. Einleitung

    In diesem Tutorial sprechen wir über die Fehlerbehandlung.

    2. Fehler

    Nehmen wir an, wir hätten ein Computerprogramm geschrieben, das einige Werte aus einer Excel-Datei liest.

    Im ersten Schritt versucht das Programm, die Datei zu öffnen. Wenn die Datei im angegebenen Pfad vorhanden ist, öffnet das Programm sie und liest Werte. Aber was passiert, wenn die Datei nicht vorhanden ist? Wir stoßen auf einen Fehler oder mit anderen Worten auf ein ungewöhnliches Ereignis, mit dem unser Code umgehen sollte, ohne dass er kaputt geht.

    3. Laufzeitfehler

    Wenn wir ein schreibenProgramminstallieren, kompilieren und ausführen, kann es zu Fehlern kommen. Einige davon sind zur Kompilierungszeit erkennbar. Beispiele für diese Fehler sind Syntaxfehler, die meist durch Tippfehler verursacht werden. Diese Fehlerkategorie heißt daherKompilierzeitFehler. Beispielsweise können wir „Syste“ anstelle von „System“ eingeben und erhalten:

    Fehlerbehandlung | Baeldung zur Informatik (2)

    Andererseits können einige Fehler erst erkannt werden, wenn das Programm ausgeführt wird. Wir rufen sie anLaufzeitFehler. Beispielsweise können wir versuchen, auf ein Element eines Arrays mit einem Index zuzugreifen, der nicht existiert, beispielsweise auf Element 15 in einem Array mit vier Elementen:

    Fehlerbehandlung | Baeldung zur Informatik (3)

    3.1. Einige Fälle von Laufzeitfehlern

    Laufzeitfehler treten auf, wenn ein Programm ausgeführt wirdund liest daher Eingabedaten, führt Berechnungen durch und schreibt Ausgabedaten.

    (Video) Einführung in die Informatik (EI) 3.10.1 Fehlerbehandlung - Paritätsprüfung

    Beispiele für Lese-/Schreib-Laufzeitfehler sind:

    • Es wird versucht, auf eine fehlende Datei zuzugreifen
    • Zu langes Warten auf ein nicht reagierendes Netzwerk (Timeout-Fehler)
    • Zugriff auf ein Array-Element außerhalb der Array-Grenze

    Beispiele für Rechenfehler:

    • Einen Wert durch Null dividieren
    • Erzeugen eines Werts außerhalb des Wertebereichs für einen bestimmten Typ. Dies wird als Überlauf bezeichnet.

    Wir können solche Fehler nicht vollständig vermeiden, da sie aufgrund der Laufzeitbedingungen auftreten und wir sie nicht kontrollieren können. Das Beste, was wir tun können, ist, unseren Code widerstandsfähig zu machen, indem wir angeben, was er tun soll, wenn er einen Fehler erkennt.

    3.2. Erkennen eines Laufzeitfehlers

    Ein Computersystem besteht sowohl aus Hardware als auch aus Software. Wir können die Softwarekomponenten weiter unterteilenBetriebssystemund Anwendungen. Wenn ein laufendes Programm (Anwendung) auf Computerhardware zugreifen muss, geschieht dies über das Betriebssystem. Oder genauer gesagt, es nennt aBibliotheksfunktionFür den Betrieb vorgesehen, auf dem die Anwendung läuft:

    Fehlerbehandlung | Baeldung zur Informatik (4)

    Wenn ein Fehler auftritt, kann ihn eine der zuvor genannten Komponenten erkennen:

    • Die Hardware, z.B. dieCPU, kann einen Rechenfehler erkennen, z. B. eine Division durch Null.
    • Die Bibliotheksfunktion des Betriebssystems kann beispielsweise einen Dateizugriffsfehler erkennen.
    • Eine Funktion in einer Anwendung erkennt möglicherweise einen Eingabefehler, z. B. wenn ein Benutzer eine Zeichenfolge anstelle einer Zahl eingegeben hat.

    Selbstverständlich kann die Erkennung je nach Ausführung der Hardware/Software auf unterschiedliche Weise erfolgen. Auf Hardwareebene sind digitale Schaltkreise für die Erkennung verantwortlich. Die Arithmetic Logic Unit (ALU) der CPU eines Computers verfügt möglicherweise über Logikschaltungen, die bestimmte Arten von Fehlern erkennen. Beispielsweise prüft der 68000-Prozessor von Motorola bei einer Divisionsanweisung, ob der Wert des Divisors Null ist. Einige andere Prozessoren führen diese Prüfung möglicherweise nicht durch. Folglich ist die auf diesen Prozessoren laufende Software für die Erkennung der Division durch Null verantwortlich.

    Auf Softwareebene können wir Fehler erkennen, indem wir den Wert einiger Fehler testenAusdruck. Eine Funktion, die eine Division ausführt, muss also den Wert des Divisors testen, um zu überprüfen, ob er Null ist.

    (Video) 10 Fehler im Informatikstudium

    Die Komponente, die einen Fehler erkennt, sollte dessen Auftreten melden.Auf diese Weise werden andere Komponenten benachrichtigt, die dann möglicherweise Maßnahmen ergreifen.

    3.3. Ankündigung eines Laufzeitfehlers

    Erkennt eine CPU einen Fehler, meldet sie diesen, indem sie das entsprechende Registerbit setzt oder einen Interrupt generiert.Beispielsweise verfügen die Intel x86-Prozessoren über eineregistrierennamens EFLAGS. Eines der Bits dieses Registers wird auf 1 gesetzt, wenn eine arithmetische Operation einen Überlauf verursacht.

    Wenn eine Funktion auf Softwareebene einen Fehler erkennt, gibt es zwei Möglichkeiten, diesen anzukündigen:

    • Gibt einen Wert zurück, der das Auftreten des Fehlers angibt.
    • Eine Ausnahme auslösen (auslösen).

    Als Beispiel für die erste Option kann eine Funktion den Wert -1 zurückgeben, wenn sie einen Fehler erkennt. Dies bedeutet natürlich, dass die Funktion unter normalen Bedingungen niemals den Wert -1 zurückgeben würde.

    Die zweite Möglichkeit besteht darin, eine Ausnahme auszulösen. Programmiersprachen, die unterstützenAusnahmen, bieten Mechanismen für:

    • Eine Ausnahme auslösen oder auslösen und damit die Entdeckung eines Fehlers ankündigen.
    • Finden Sie heraus, ob Ausnahmen aufgetreten sind.
    • Führt eine Aktion aus, wenn eine ausgelöste Ausnahme gefunden wird.

    Der letzte Schritt oben wird als Behandlung der ausgelösten Ausnahme bezeichnet.

    3.4. Behandeln einer Ausnahme

    Betrachten wir eine Funktion, die eine Operation ausführt und gleichzeitig auf mögliche Fehler prüft. Was muss es tun?

    1. Überprüfen Sie zunächst, ob der Fehler aufgetreten ist, indem Sie den Wert eines Ausdrucks testen.
    2. Wenn der Fehler aufgetreten ist, sollte die Funktion den Fehler durch Auslösen einer Ausnahme ankündigen.
    3. Der Aufrufer sollte prüfen, ob tatsächlich eine Ausnahme ausgelöst wurde.
    4. Dann sollte es damit umgehen, indem es den Ausnahmehandler ausführt. Dabei handelt es sich um den Codeausschnitt, der angibt, was getan werden soll, wenn diese Ausnahme ausgelöst wird.

    Wir nennen die Schritte 3 und 4 das Abfangen einer Ausnahme. Dies ist der Ablauf beim Auslösen und Abfangen von Ausnahmen:

    (Video) Informatik 8 - Datenübertragung mit Fehlerüberprüfung

    Fehlerbehandlung | Baeldung zur Informatik (5)

    4. Hierarchie der Ausnahmen

    Ausnahmen sind entweder integriert oder benutzerdefiniert.

    Das Laufzeitsystem einiger Sprachen, wie z. B. Java, definiert mehrereKlassenvon Ausnahmen. Wir können sie nutzen, ohne uns Gedanken über ihr Innenleben machen zu müssen. Wir können jedoch auch unsere eigenen Ausnahmen definieren, indem wir eine der vordefinierten Ausnahmen in Unterklassen unterteilen.Daher gibt es normalerweise eine Hierarchie von Ausnahmen.

    4.1. Passend zur Ausnahme

    Wir können den Typ der Ausnahme verwenden, um den richtigen Handler auszuwählen. Nehmen wir an, wir haben mehrere Throw-Anweisungen, bei denen die Ausnahmen unterschiedlichen Typs sind. Wenn wir jede Ausnahme unterschiedlich behandeln müssen, verfügen wir über mehrere Handler in mehreren Catch-Blöcken. Die vorherige Abbildung veranschaulicht dies, wobei der Typ der Ausnahmen einer von n Typen sein kann.

    Die Übereinstimmung zwischen einer Ausnahme und einem Handler erfolgt dann mithilfe von Typen. Eine Ausnahme dieser ArtTwird vom Catch-Block verarbeitet, dessen formaler Parameter vom Typ istT, oder ein Elternteil (Vorfahre) vonTin der Hierarchie der Ausnahmeklassen.

    5. Ausnahmen in verschachtelten Funktionsaufrufen

    Eine Funktion verfügt möglicherweise über eine Throw-Anweisung ohne passenden Ausnahmehandler. In diesem Fall kann eine ausgelöste Ausnahme nicht verarbeitet werden. Die Ausnahme entgeht daher der Funktion, die beendet wird. Dies ist unten in der vorherigen Abbildung dargestellt. Das Laufzeitsystem muss dann den dieser Funktion zugewiesenen Stack-Frame freigeben.Die Ausnahme selbst kann sich jedoch auf der Suche nach einem Handler auf andere Funktionen übertragen.

    5.1. Beispiel

    Nehmen wir an, wir haben eine FunktionFdas ruft Funktion aufGwas wiederum die Funktion aufruftH, und so weiter, bis wir eine Funktion habenK. Nehmen wir nun die letzte Funktion in dieser Sequenz an, d. h. FunktionK,löst eine Ausnahme aus. Diese Ausnahme kann in K aus einem von zwei Gründen nicht behandelt werden:

    • K enthält nur eine Throw-Anweisung ohne Ausnahmebehandler.
    • In K gibt es mehrere Ausnahmehandler, aber keiner von ihnen entspricht dem Typ dieser spezifischen Ausnahme.

    In diesem Fall wird Funktion K beendet und das Laufzeitsystem gibt die Ausnahme auf der Suche nach einem Handler in der Aufrufsequenz weiter:

    (Video) C# Try und Catch - Fehler abfangen (Exception Handling)

    Fehlerbehandlung | Baeldung zur Informatik (6)

    In jeder Funktion in der Sequenz versucht das Laufzeitsystem, die Ausnahme mit einem Handler abzugleichen. Wenn einer gefunden wird, wird er ausgeführt. Wenn nicht, entkommt die Ausnahme dieser Funktion. Das Laufzeitsystem beendet die Funktion und gibt seinen Tack-Frame frei. Die Ausnahme wird dann weiter oben in der Aufrufsequenz weitergegeben. Wenn keine Funktion die Ausnahme verarbeiten kann, wird das gesamte Programm beendet.

    6. Fazit

    In diesem Artikel haben wir über die Fehlerbehandlung mithilfe von Ausnahmen gesprochen. Wir haben gesehen, wie Ausnahmen ausgelöst, erkannt und behandelt werden. Sie sollten es unserem Code ermöglichen, verschiedene Laufzeitfehler zu beheben und sie nicht nur zu erkennen.

    FAQs

    Welche Fehlertypen gibt es in der Programmierung? ›

    • Fehlertypen.
    • Syntaktische Fehler.
    • Laufzeitfehler.
    • Logische Fehler.
    Dec 1, 2021

    Was ist die wichtigste Programmiersprache? ›

    Inhalt
    • Das sind die beliebtesten Programmiersprachen 2023.
    • Platz 1: Python (27.7%)
    • Platz 2: Java (16.8%)
    • Platz 3: JavaScript (9.65%)
    • Platz 4: C# (7%)
    • Platz 5: C/C++ (6.9%)
    • Platz 6: PHP (5.23%)
    • Platz 7: R (4.11%)

    Was ist ein Bug in der IT? ›

    Als Bugs (deutsch: Käfer) werden Fehler in Computerprogrammen bezeichnet, die dazu führen, dass die Software nicht so funktioniert, wie sie es sollte. Meist gehen Bugs auf einen Fehler im Programmcode zurück, der oft erst von Endanwendern entdeckt wird, wenn sie das Programm ausführen.

    Was sind fehlertypen? ›

    Längenfehler sind Differenzen zwischen dem wahren Wert des Messobjekts und dem Messwert oder zwischen dem Referenzwert und dem Messwert. Sie werden als „Fehler = Messwert – wahrer Wert“ ausgedrückt.

    Welche Arten von Bugs gibt es? ›

    Arten von Programmierfehlern
    • Lexikalischer Fehler: Dies ist der einfachste und wohl am schwierigsten aufzufindende Bug. ...
    • Syntaktischer Fehler: Die „Grammatik“ der Sprache ist falsch. ...
    • Semantischer Fehler: Dieses Problem entsteht, wenn mit Variablen gearbeitet wird, die vorher nicht definiert wurden.
    Jul 17, 2020

    Was bedeutet Type Error? ›

    TypeError Fehlermeldungen

    "TypeError"-Meldungen bedeuten, dass Sie eine Art von Daten so behandeln, als wären es eine andere Art von Daten.

    Videos

    1. Informatik 8 - Paritätsprüfung und Paritätsbit
    (Herr Sauer)
    2. Einführung in die Informatik (EI) 3.10.2 Fehlererkennung - CRC
    (Prof. Dr. Miriam Föller-Nord)
    3. Lösungsorientierte Fehlerbehandlung - Thomas Aglassinger
    (Grazer Linuxtage)
    4. In 3 Schritten jedes Programmier-Problem lösen
    (Programmieren Starten)
    5. Fehlererkennung Datenübertragung | Paritätsbit
    (Informatik und Mathematik by Dr. Gebhardt)
    6. Schlechte Fehlerbehandlung in C#, Java & Co [Mit Beispiel] Clean Code Tipp #14
    (David Tielke)

    References

    Top Articles
    Latest Posts
    Article information

    Author: Sen. Ignacio Ratke

    Last Updated: 09/29/2023

    Views: 5831

    Rating: 4.6 / 5 (56 voted)

    Reviews: 95% of readers found this page helpful

    Author information

    Name: Sen. Ignacio Ratke

    Birthday: 1999-05-27

    Address: Apt. 171 8116 Bailey Via, Roberthaven, GA 58289

    Phone: +2585395768220

    Job: Lead Liaison

    Hobby: Lockpicking, LARPing, Lego building, Lapidary, Macrame, Book restoration, Bodybuilding

    Introduction: My name is Sen. Ignacio Ratke, I am a adventurous, zealous, outstanding, agreeable, precious, excited, gifted person who loves writing and wants to share my knowledge and understanding with you.