Fehler und Ausnahmen – Grundwissen

Hier gibt es Infos zu Fehlern in der Programmierung.
Wenn ein Mensch an etwas arbeitet entstehen Fehler. Das ist nunmal so. Auch mit der Arbeit mit Python werden irgendwann Fehler auftreten …
Hier gibt es erst einmal Grundwissen zu den Fehlern. Beispiele mit Lösungen gibt es hier.

Bisher waren Fehlermeldungen nicht mehr als erwähnt, aber wenn Sie die Beispiele ausprobiert haben, haben Sie wahrscheinlich einige gesehen. Es gibt (mindestens) zwei unterscheidbare Arten von Fehlern: Syntaxfehler und Ausnahmen (syntax errors and exceptions).

Syntaxfehler

Syntaxfehler, auch als Analysefehler bezeichnet, sind möglicherweise die häufigste Art von Beschwerde, die Sie erhalten, während Sie Python noch lernen:

>>> while True print('Hello world')
  File "<stdin>", line 1
    while True print('Hello world')
                   ^
SyntaxError: invalid syntax

Syntaxfehler (englisch Syntax error) im Allgemeinen sind Verstöße gegen die Satzbauregeln einer Sprache. In der Informatik bezieht sich das Wort in der Regel auf den sogenannten kontextfreien Anteil der syntaktischen Regeln einer Programmiersprache. Programme mit Syntaxfehlern werden von einem Compiler oder Interpreter zurückgewiesen. Der Parser wiederholt die fehlerhafte Zeile und zeigt einen kleinen Pfeil an, der auf den frühesten Punkt in der Zeile zeigt, an dem der Fehler erkannt wurde. Der Fehler wird durch das Token vor dem Pfeil verursacht (oder zumindest erkannt): Im Beispiel wird der Fehler bei der Funktion print () erkannt, da ein Doppelpunkt (‚:‘) davor fehlt. Dateiname und Zeilennummer werden gedruckt, damit Sie wissen, wo Sie suchen müssen, falls die Eingabe von einem Skript stammt.

Ausnahmen bzw exceptions


Selbst wenn eine Anweisung oder ein Ausdruck syntaktisch korrekt ist, kann dies zu einem Fehler führen, wenn versucht wird, sie auszuführen. Während der Ausführung erkannte Fehler werden als Ausnahmen bezeichnet und sind nicht unbedingt schwerwiegend: Sie werden bald lernen, wie Sie mit ihnen in Python-Programmen umgehen. Die meisten Ausnahmen werden jedoch nicht von Programmen behandelt und führen zu Fehlermeldungen, wie hier gezeigt:

>>> 10 * (1/0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 4 + spam*3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'spam' is not defined
>>> '2' + 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly

Bitte beachten: Python unterscheidet wie Linux zwischen Groß- und Kleinschreibung. Variable , variable und VARIABLE sind 3 unterschiedliche Variablen!

In der EDV wird meist englisch gesprochen, Hier gibt es Begriffe, die Fehler bedeuten oder mit Fehlern zu tun haben::

  • error = Fehler
  • exception = Ausnahme
  • false = falsch
  • fault = Fehler, falsch
  • bug = Fehler, Wanze
  • trip = Fehler, Reise
  • misstep = Fehler, Fehltritt
  • defect = Defekt, kaputt
  • flaw = Fehler, Mangel, Defekt
  • destroy – zerstören
Fehlermeldung EnglischFehlermeldung Deutsch
TypeError: 'range' object does not support item assignmentTypeFehler: Das Objekt 'range' unterstützt keine Elementzuweisung
TypeError: 'type' object is not subscriptableTypeFehler: Das Objekt 'type' kann nicht tiefgestellt werden
Ein subskriptierbares Objekt ist jedes Objekt, das die spezielle Methode __getitem__ implementiert (wie Listen und Dictornarys). Die Bedeutung des Index beim Rechnen ist: "Ein Symbol (fiktiv als Index geschrieben, aber in der Praxis normalerweise nicht), das in einem Programm allein oder mit anderen verwendet wird, um eines der Elemente eines Arrays zu spezifizieren."
AttributeError: module 'random' has no attribute 'rant'AttributeFehler: Modul 'random' hat kein Attribut 'rant'
Ein Modul ist eine Datei, die Python-Definitionen und -Anweisungen beinhaltet.
EOFErrorDateiende erreicht (End-of-File Error)
FilenotfoundErrorDatei nicht gefunden
Index-ErrorZugriff auf ein nicht vorhandenes Element (
Keyboard-InterruptTastatur-Abbruch. Der Nutzer hat STRG+C gedrückt
Permission-ErrorRechtefehler, unzureichende Rechte für den Dateizugriff.
Recursion-ErrorÜberschreitung der maximalen Rekursionstiefe
TypeErrorFalscher Datentyp
Unicode Errorfehlerhafte Codierung in der Zeichenkette
ValueErrorParameter ausserhalb des zulässigen Datenbereiches
ZeroDivisionErrorDivision durch 0

Umgang mit Ausnahmen



Es ist möglich, Programme zu schreiben, die ausgewählte Ausnahmen behandeln. Schauen Sie sich das folgende Beispiel an, in dem der Benutzer zur Eingabe aufgefordert wird, bis eine gültige Ganzzahl eingegeben wurde, der Benutzer jedoch das Programm unterbrechen kann (mit Control-C oder was auch immer das Betriebssystem unterstützt). Beachten Sie, dass eine vom Benutzer generierte Unterbrechung durch Auslösen der KeyboardInterrupt-Ausnahme signalisiert wird.

>>> while True:
...     try:
...         x = int(input("Bitte eine Zahl eingeben: "))
...         break
...     except ValueError:
...         print("Oops!  Das war keine reine Zahl, probier es nochmals ...")
...

Die try-Anweisung funktioniert wie folgt. Zunächst wird die try-Klausel (die Anweisung (en) zwischen den Schlüsselwörtern try und exclude) ausgeführt. Wenn keine Ausnahme auftritt, wird die Ausnahmeklausel übersprungen und die Ausführung der try-Anweisung abgeschlossen. Wenn während der Ausführung der try-Klausel eine Ausnahme auftritt, wird der Rest der Klausel übersprungen. Wenn der Typ dann mit der nach dem Schlüsselwort exception benannten Ausnahme übereinstimmt, wird die Ausnahmeklausel ausgeführt, und die Ausführung wird nach der try-Anweisung fortgesetzt. Wenn eine Ausnahme auftritt, die nicht mit der in der Ausnahmeklausel genannten Ausnahme übereinstimmt, wird sie an äußere try-Anweisungen weitergeleitet. Wenn kein Handler gefunden wird, handelt es sich um eine nicht behandelte Ausnahme, und die Ausführung wird mit einer Meldung wie oben gezeigt gestoppt.