66
Anja Aue | 07.09.16 Python „Fehler im Code“

Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Anja Aue | 07.09.16

Python„Fehler im Code“

Page 2: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 2

Softwarefehler

Programmierfehler entstehen beim Schreiben des Programmcodes. Der Code entspricht nicht der Syntax der Programmiersprache.

Logische Fehler können durch Denkfehler bei der Umsetzung der Aufgabe in ein Programm erzeugt werden. Das Programm wird fehlerfrei ausgeführt, aber das Ergebnis ist nicht korrekt.

Laufzeitfehler treten während der Ausführung des Programms auf. Zum Beispiel ist eine Datei nicht an dem angegebenen Speicherort abgelegt. Eine Division durch Null wirft einen Fehler.

Page 3: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 3

Syntaxfehler

Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer Programmiersprache. Ein Ausdruck oder eine Anweisung hat einen falschen

Datentyp. Sobald ein Syntaxfehler auftritt, wird die Ausführung des

Programms durch den Interpreter abgebrochen.

Page 4: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 4

Beispiele

Tippfehler bei der Eingabe von Variablennamen oder Schlüsselwörtern.

Mischung von numerischen und nicht-numerischen Operatoren.

Syntaxfehler in Schleifen oder bedingten Anweisungen. Falsche Übergabe von Parametern.

Page 5: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 5

… bei der Eingabe von Code in der Shell

In der Shell wird jede Anweisung (Zeile) durch die Eingabetaste <Return> abgeschlossen.

Der Code wird sofort interpretiert und ein auftretender Syntaxfehler in der nächsten Zeile angezeigt.

Page 6: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 6

Informationen zu einem Syntaxfehler

In der Shell beginnt jeder Syntaxfehler mit dem Präfix SyntaxError und dem Doppelpunkt.

Dem Doppelpunkt folgt eine Beschreibung des Fehlers. Entsprechend des verursachten Syntaxfehlers wird eine Meldung ausgegeben.

SyntaxError : EOL while scanning string literal

Fehlertyp : Fehlermeldung

Page 7: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 7

… bei der Eingabe von Code in den Editor

Page 8: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 8

Erläuterung

Das Programm wird mit Run – Run Module (F5) gestartet. Jede Zeile wird vom Interpreter entsprechend ausgeführt. Sobald ein Syntaxfehler auftritt, wird ein Dialog eingeblendet. In der Titelleiste des Dialogs wird die Art des Fehlers

angezeigt. Im Dialog selber wird die passende Fehlermeldung angezeigt. Die Fehlermeldung wird mit OK bestätigt.

Im Code selber wird die Zeile, die den Fehler verursacht hat, farbig markiert. Die Einfügemarke wird in die entsprechende Zeile gesetzt.

Page 9: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 9

Fehler: Falsche Einrückung

Falls Anweisungen nicht korrekt eingerückt sind, wird der Fehler unexpected indent angezeigt.

Page 10: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 10

Hinweise

Anweisungen können in verschiedenen Einrücktiefen vorkommen.

Anweisungen auf der obersten Ebene werden nicht eingerückt.

if-Anweisungen oder Schleifen auf der obersten Ebene stellen „Ordner“ dar, die Anweisungen darunter zusammenfassen. Anweisungen werden entsprechend der Zuordnung zu einer bedingten Anweisung oder Schleife eingerückt.

Falls if-Anweisungen oder Schleifen verschachtelt sind, verschiebt sich die dazugehörige Anweisung um eine Ebene.

Page 11: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 11

Fehler: Leerer Anweisungsblock

Jede bedingte Anweisung oder Schleife benötigt mindestens eine Anweisung im Rumpf.

Falls diese nicht vorhanden ist, wird der Fehler expected an indented block angezeigt.

Page 12: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 12

Leerer Anweisung

Das Schlüsselwort pass symbolisiert eine leere Anweisung.

zahlL = zahlMin

for zahlL in range(zahlMin, zahlMax + 1): zahlR = zahlMin for zahlR in range(zahlMin, zahlMax + 1): pass

Page 13: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 13

Logische Fehler

Treten bei der Ausführung der Software auf. Falsche Berechnung von Werten. Fehlerhaftes Design der Software. Falsche Nutzung durch den Benutzer.

Page 14: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 14

Strategien

Testen des Programms mit Hilfe des Debuggers. Der Entwickler kann Zeilen, die in Verdacht stehen einen

Fehler zu verursachen, auskommentieren. Falls das Programm anschließend fehlerfrei läuft, ist der Fehler lokalisiert und kann behoben werden.

Nach einem erfolgreichen Test wird das Programm gespeichert. Für die Weiterentwicklung wird die Programmdatei kopiert. Falls Fehler nicht gefunden werden, kann auf eine alte fehlerfreie Version zurückgegriffen werden.

Page 15: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 15

Debuggen von Code

Der Debugger wird in der Shell gestartet (Debug – Debugger). In der Shell wird der Hinweis [Debug ON] angezeigt.

Anschließend wird das Programm im Editor gestartet (Run – Run Module).

Im Debugger wird die erste Zeile des Codes angezeigt.

Page 16: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 16

Debugger

Page 17: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 17

Schaltfläche am oberen Rand

Go. Ab der auszuführenden Anweisung wird das Programm vollständig oder bis zum nächsten Haltepunkt durchlaufen.

Step. Zeilenweise wird das Programm ausgeführt. Over. Das Programm führt die nächste Anweisung aus. Falls

eine Funktion aufgerufen wird, wird nicht in diese hineingesprungen. Der Aufruf der Funktion wird aber ausgeführt.

Out. Das Programm durchläuft die aktuelle Funktion vollständig.

Quit. Der Debugger wird beendet.

Page 18: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 18

Kontrollkästchen zum Anzeigen von Informationen

Stack blendet das Textfenster ein und aus. In dem Fenster werden die aktuell auszuführenden Anweisungen angezeigt.

Locals zeigt die lokalen Variablen am unteren Rand an. Globals zeigt die globalen Variablen des Programm am unteren

Rand an. Source zeigt im Quellcode die aktuell auszuführende Zeile an.

Page 19: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 19

Lokale Variablen

Variablen, die mit zwei Unterstrichen beginnen, sind von Python vordefinierte Variablen. Die Variable __name__ gibt den Namen des aktuellen Moduls an.

Page 20: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 20

Haltepunkte

Farbige Markierungen im Code. Die Ausführung eines Programms wird im Debug-Modus an

einem Haltepunkt unterbrochen.

Page 21: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 21

… setzen

Rechter Mausklick auf die gewünschte Anweisung im Editor. Im Kontextmenü wird der Befehl Set Breakpoint ausgewählt.

Page 22: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 22

… löschen

Rechter Mausklick auf die gewünschte Anweisung im Editor. Im Kontextmenü wird der Befehl Clear Breakpoint ausgewählt.

Page 23: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 23

Laufzeitfehler

Ausdrücke oder Anweisungen werden vom Programm nicht korrekt ausgewertet.

Fehler, die zur Laufzeit des Programms, ein nicht erwünschtes Verhalten des Programms erzeugen.

Das Programm kann abstürzen.

Page 24: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 24

Beispiele für Laufzeitfehler

Division durch Null. Falsche Verwendung von Operanden und / oder Operatoren. Endlosschleife Ein- und Ausgabefehler.

Page 25: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 25

Anzeige in der Shell

Welcher Laufzeitfehler ist aufgetreten? In diesem Beispiel ist ein TypeError aufgetreten.

Page 26: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 26

… in einer Code-Datei verursacht

Page 27: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 27

Informationen zum Fehler

Dem Wort Traceback folgt die Beschreibung des verursachten Laufzeitfehlers.

Dem Wort File folgt die Bezeichnung und Speicherort der Datei, die den Fehler verursacht hat.

Dem Wort line folgt die Zeilenangabe, in der der Laufzeitfehler in der angegebenen Datei aufgetreten ist.

Darunter wird der Fehlertyp und die Fehlermeldung angezeigt.

Page 28: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 28

Sprung zum Fehler

Mit der rechten Maustaste wird auf das Wort line geklickt. Im geöffneten Kontextmenü wird der Befehl Go to File / Line

ausgeführt. Entsprechend der Angaben wird zu der Zeile in der Code-

Datei gesprungen, die den Laufzeitfehler auslöst.

Page 29: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 29

Exception

Ausnahme von der Regel. Fehler, die zur Laufzeit des Programms auftreten können. Fehler, die im Code abgefangen und repariert werden

können.

Page 30: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 30

Informationen im Web

https://docs.python.org/3/library/exceptions.html http://www.tutorialspoint.com/python/standard_exceptions.htm http://www.python-kurs.eu/ausnahmebehandlung.php

Page 31: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 31

Exception „Division durch Null“

beispiel\kapitel08_Fehler\zeroDivisionError.py

zahlL = 4zahlR = 0

ergebnis = zahlL / zahlR

Page 32: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 32

Exception-Handling

be

isp

iel\k

ap

itel0

8_

Fe

hle

r\ze

roD

ivis

ion

Err

or.

py

zahlL = 4zahlR = 0ergebnis = 0

try: ergebnis = zahlL / zahlR

except ZeroDivisionError: print("Eine Division durch Null ist nicht erlaubt.")

except: print("Ein unbekannter Fehler ist aufgetreten")

else: print("Ergebnis der Division: ", ergebnis)

Page 33: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

C++ - Einführung | 06.05.15 Seite 33

Aufbau

try: ergebnis = zahlL / zahlR

except ZeroDivisionError: print("Division durch Null.")

Versuche

Abfangen von speziellen Fehlern

except: print("Allgemeiner Laufzeitfehler")

Abfangen von allen anderen Fehlern

else: print("Kein Fehler")

Wenn kein Fehler aufgetreten ist ...

finally: print("Egal")

Wird immer ausgeführt

Page 34: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 34

Versuche die Anweisungen auszuführen

Beginn mit dem Schlüsselwort try. Dem Schlüsselwort folgt der Doppelpunkt. In der nächsten

Zeile beginnt der, zu dem Befehl gehörende Codeblock. In dem Codeblock können Laufzeitfehler auftreten, müssen

aber nicht.

try: ergebnis = zahlL / zahlR

Page 35: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 35

Abfangen aller Laufzeitfehler

Dem Schlüsselwort except folgt der Doppelpunkt. In der nächsten Zeile beginnt der, zu dem Befehl gehörende Codeblock.

Der Codeblock fängt alle Laufzeitfehler ab.

try: ergebnis = zahlL / zahlR

except: print("Ein unbekannter Fehler ist aufgetreten")

Page 36: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 36

Ablauf

for zahl in zahlen:

try: index = index + 1 ergebnis = zahl / zahlen[index]

except: print("Laufzeitfehler") break

Versuche die Anweisungen auszuführen

Falls ein Fehler auftritt

Page 37: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 37

Spezifizierung von Exceptions

Dem Schlüsselwort except folgt der Name des abzufangenden Laufzeitfehlers.

In diesem Beispiel wird die Standard-Exception ZeroDivisionError abgefangen. Der Fehler ZeroDivisionError: division by zero wird durch diese Anweisung abgefangen.

try: ergebnis = zahlL / zahlR

except ZeroDivisionError: print("Eine Division durch Null ist nicht erlaubt.")

Page 38: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 38

Erläuterung

Dem Befehl except kann der Name eines Laufzeitfehlers folgen, muss aber nicht.

Als Name kann die Bezeichnung einer Standard-Exception oder selbstdefinierte Fehler genutzt werden.

except ZeroDivisionError :

except :

except Name :

Page 39: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 39

Reihenfolge von except-Anweisungen

try: ergebnis = zahlL / zahlR

except ZeroDivisionError: print("Eine Division durch Null ist nicht erlaubt.")

except: print("Ein unbekannter Fehler ist aufgetreten")

Genera lisierun g

Spezial isierung

Page 40: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 40

Hinweise

Jedem Befehl try muss mindestens eine except-Anweisung folgen. Andernfalls wird der Syntaxfehler unexected EOF while parsing angezeigt.

try-Anweisungen können verschachtelt werden. Entsprechend der Einrücktiefe werden den try-Anweisungen except-Anweisung zugeordnet.

Page 41: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 41

Falls kein Laufzeitfehler auftritt

Dem Befehl else folgt der Doppelpunkt. In der nächsten Zeile wird der dazugehörige Codeblock eingerückt angezeigt.

Der Codeblock wird nur ausgeführt, wenn keine Laufzeitfehler aufgetreten ist.

Der else-Zweig ist optional.

try: ergebnis = zahlL / zahlR

else: print("Ergebnis der Division: ", ergebnis)

Page 42: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 42

Finale ...

Dem Befehl finally folgt der Doppelpunkt. In der nächsten Zeile wird der dazugehörige Codeblock eingerückt angezeigt.

Der Codeblock wird immer ausgeführt, egal ob Fehler aufgetreten sind oder nicht. In diesem Block werden Aufräumarbeiten ausgeführt.

Der finally-Zweig ist optional.

try: ergebnis = zahlL / zahlR

finally: print("… bis zum Index {} durchlaufen.".format(index))

Page 43: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 43

ZeroDivisionError

ArithmeticError TypeError

Hierarchie der Standard-Exceptions (Ausschnitt)

IndexError KeyError

NameError ValueError LookupError

Exception

BaseException

Page 44: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 44

Exception „ZeroDivisionError“

zahlen = [1, 2, 3, 4, 5, 0, 6, 7, 9, 0]ergebnis = 0index = 0

for zahl in zahlen: try: index = index + 1 ergebnis = zahl / zahlen[index]

except ZeroDivisionError: print("Eine Division durch Null ist nicht erlaubt.") break

Page 45: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 45

Exception „ValueError“

Einer Funktion oder Methode werden Argumente übergeben. Das Argument hat den richtigen Datentyp, aber einen fehlerbehafteten Wert.

Das Argument kann nicht entsprechend der Konvertierungsfunktion interpretiert werden.

Probleme bei der Kodierung von Unicode-Zeichen.

Page 46: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 46

… bei der Konvertierung von Strings

Fehlermeldung bei Gleitkommazahlen ValueError: could not convert string to float:.

Fehlermeldung bei Ganzzahlen: invalid literal for int() with base 10:.

strTemperatur = input("Bitte geben Sie die Temperatur ein: ")

try: temperatur = float(strTemperatur)

except ValueError: print("Falsche Eingabe. Bitte geben Sie eine Gleitkommazahl ein.")

Page 47: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 47

… bei Sequenzen

Löschung von Elementen, die nicht in der Liste gespeichert sind.

Fehlermeldung: ValueError: list.remove(x): x not in list

buchstaben = ['a', 'b', 'c', 'd']

try: buchstaben.remove('e') except ValueError: print("Das Element ist in der Liste nicht vorhanden")

Page 48: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 48

Exception „TypeError“

Die Variable kann nicht entsprechend der gewünschten Aktion interpretiert werden.

In diesem Beispiel wird der Fehler TypeError: unsupported operand type(s) for +: 'int' and 'str' geworfen.

summe = 0ausgabe = ''

try: summe = 5 + 6 ausgabe = 5 + ' + ' + 6 + ' = ' + summe except TypeError: print("Für den Operanden wird der falsche Typ genutzt")

Page 49: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 49

Exception „NameError“

Ein Name wird nicht gefunden. Variablen wurden vor der Nutzung nicht deklariert und

initialisiert. Methoden werden als Funktionen aufgerufen.

Page 50: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 50

… bei Variablen

In diesem Beispiel wird der Fehler NameError: name 'zahlR' is not defined geworfen.

Eine Variable muss vor ihrer Nutzung deklariert und initialisiert werden.

zahlL = 5

try: summe = zahlL + zahlR

except NameError: print("Eine der Variablen ist nicht definiert.")

Page 51: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 51

… bei nicht definierten Methoden / Funktionen

In diesem Beispiel wird der Fehler NameError: name 'count' is not defined geworfen.

Eine Funktion / Methode muss vor ihrer Nutzung deklariert und initialisiert werden.

buchstaben = ['a', 'b', 'c', 'd']

try: if count(buchstaben) > 0: del buchstaben[len(buchstaben) - 1]

except NameError: print("Die Funktion oder die Variable ist nicht definiert.")

Page 52: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 52

Exception „IndexError“ bei Strings und Sequenzen

buchstaben = ['a', 'b', 'c', 'd']lastIndex = len(buchstaben)index = 0

try: while(index <= lastIndex): print(buchstaben[index]) index += 1

except IndexError: print("Die Unter- oder Obergrenze wurde überschritten.")

Page 53: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 53

Exception „KeyError“ bei Wörterbüchern

farbe = {'rot':255, 'gruen':0, 'blau':0}

try: farbton = farbe["gelb"]

except KeyError: print("Der Schlüssel ist nicht vorhanden")

Page 54: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 54

Exception „IOError“

try: datei = open('adrese.csv', 'r')

except IOError: print("Die Datei ... konnte nicht geöffnet werden.")

else: strZeile = datei.readline()

while strZeile: listeAdresse.append(strZeile.split(';')) strZeile = datei.readline()

datei.close()

Page 55: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 55

Informationen zu einem Fehler

import sys

strZahlL = input("Bitte geben Sie eine Ganzzahl ein: ")strZahlR = input("Bitte geben Sie den Vergleichswert ein: ")

try: zahlL = int(strZahlL) zahlR = int(strZahlR)

except: print("Error-Type: ", sys.exc_info()[0]) print("Error-Wert / Beschreibung: ", sys.exc_info()[1]) print("Traceback: ", sys.exc_info()[2])

Page 56: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 56

Module

Zusammenfassung von Codeblöcken zu einem Thema. Zum Beispiel enthält das Modul sys systemspezifische

Funktionen. Einige Module wie sys werden automatisch mit der

Programmiersprache Python installiert. Andere müssen gesondert installiert werden.

Page 57: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 57

… importieren

Bekanntmachung von Modulen. Im Anschluss an die Shebang-Zeilen werden die, in dem

Code benötigten Module importiert. Dem Befehl import folgt der Name des Moduls. Alle, in dem Module definierten Methoden / Funktionen und

Konstanten können in der Code-Datei, in das Modul eingebunden ist, genutzt werden.

import sys

Page 58: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 58

Funktion „exc_info“

Der Funktion werden keine Argumente übergeben. Die Klammern sind leer.

Die Funktion gibt ein Tupel zurück. Das Tupel enthält Informationen zu dem geworfenen Laufzeitfehler.

exceptionTupel = sys.exc_info()

Page 59: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Programmiersprache Python Seite 59

Welche Version wird genutzt?

Die Bibliothek sys wird mit Hilfe des Schlüsselwortes import geladen.

Die schreibgeschützte Liste version_info gibt Auskunft über die genutzte Version.

Die Liste version_info ist in der Bibliothek sys definiert. Bibliothek und Liste werden mit einem Punkt verbunden.

>>> import sys>>> sys.version_infosys.version_info(major=3, minor=5, micro=2, releaselevel='final', serial=0)

Page 60: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 60

Informationen zu Fehlern

exceptionTupel = sys.exc_info()

Die Bibliothek sys ist im Code eingebunden. Die Methode exc_info gibt Auskunft über den Ausnahmefehler. Die Methode exc_info ist in der Bibliothek sys definiert.

Bibliothek und Methode werden mit einem Punkt verbunden.

Page 61: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 61

Rückgabewert der Methode .exc_info()

Die Methode gibt ein Tupel zurück. Das Element hat drei Elemente. Durch Angabe eines Index

kann die Information in den verschiedenen Elementen gelesen werden.

Der Index wird in eckige Klammern angegeben. Das erste Element hat den Index 0 und so weiter.

exceptionTupel = sys.exc_info()print("Error-Type: ", exceptionTupel[0])print("Error-Wert / Beschreibung: ", exceptionTupel[1])print("Traceback: ", exceptionTupel[2])

Page 62: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 62

1. Element des Tupels: Fehlertyp

Welcher Fehlertyp ist aufgetreten? Jeder Name einer Standard-Exception kann vorkommen. TypeError, ValueError etc. beschreiben verschiedene

Fehlertypen.

exceptionTupel = sys.exc_info()print("Error-Type: ", exceptionTupel[0])

Page 63: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 63

2. Element des Tupels: Fehlermeldung

Beschreibung des Fehlers. Hilfe zur Behebung des Fehlers. Zum Beispiel: could not convert string to float:

exceptionTupel = sys.exc_info()print("Error-Type: ", exceptionTupel[1])

Page 64: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 64

3. Element des Tupels: Traceback

Wo wurde der Fehler verursacht? Aus welchen Kontext heraus wurde der Fehler geworfen?

Mit Hilfe des Moduls traceback können Informationen in Bezug auf den Kontext ausgegeben werden.

In diesem Beispiel wird der Traceback von exceptionTupel[2] ausgegeben.

import traceback

exceptionTupel = sys.exc_info()print("Error-Type: ", exceptionTupel[2])traceback.print_tb(exceptionTupel[2])

Page 65: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 65

Exceptions ignorieren

buchstaben = ['a', 'b', 'c', 'd']

try: zeichen = input("Welches Zeichen möchten Sie löschen: ") buchstaben.remove(zeichen) except ValueError: pass except: print("Unbekannter Fehler"))

Page 66: Python „Fehler im Code“ - luis.uni-hannover.de · Programmiersprache Python Seite 3 Syntaxfehler Verstoß gegen die Regeln einer Programmiersprache. Verletzung der Syntax einer

Java - Einführung | 06.05.15 Seite 66

Erläuterung

Das Schlüsselwort pass symbolisiert eine leere Anweisung. In dem Beispiel wird pass genutzt, um einen Laufzeitfehler

abzufangen und nicht zu behandeln.