Teil 6: Fehler

Lernziele
  • Syntaxfehler, Laufzeitfehler und logische Fehler unterscheiden
  • Eine Fehlermeldung lesen und die betroffene Zeile finden
  • Erklären, warum Schlüsselwörter keine Variablennamen sein dürfen
  • Fehlerhafte Programme korrigieren
  • Ein Programm gezielt testen, statt nur zu hoffen, dass es stimmt

Keine neuen Befehle. Neu ist die Fähigkeit, Fehlermeldungen zu lesen.

Fehler

Beim Programmieren treten Fehler auf, immer. Bei grösseren Projekten macht das Finden und Beheben von Fehlern mehr als die Hälfte der Arbeitszeit aus. Fehler zu machen ist also kein Zeichen von Unfähigkeit, sondern der Normalfall.

Wenn ein Fehler auftritt, meldet Python die Zeile, in der er aufgetreten ist, und gibt eine kurze Erklärung dazu. Das ist fast immer der erste Anhaltspunkt. Lies die Meldung, bevor du etwas änderst.

Syntaxfehler

Syntaxfehler sind Verstösse gegen die Grammatik der Programmiersprache. Python beginnt gar nicht erst, das Programm auszuführen.

print "ein Test"
print("Hallo"
x = "Informatik
print("Hallo")print("Welt")

Typische Ursachen sind fehlende Klammern, fehlende Anführungszeichen, ein fehlender Zeilenumbruch zwischen zwei Befehlen und falsche Einrückung.

Schlüsselwörter

Manche Wörter sind in Python reserviert und dürfen nicht als Variablennamen dienen. Dazu gehören unter anderem if, else, for, while, def, class, from, import, return, and, or, not, True, False und None. Folgendes gibt deshalb einen Syntaxfehler:

class = "Informatik"
from = "Zuerich"

Im Editor erkennst du Schlüsselwörter daran, dass sie farbig hervorgehoben werden.

Laufzeitfehler

Laufzeitfehler treten erst beim Ausführen auf. Die Grammatik stimmt, aber das Programm stösst auf eine Anweisung, die es nicht ausführen kann.

callMe = "Maybe"
print(callme)
print(1 / 0)
print("Zehn" + 10)
verboten = int("drei")

Typische Ursachen sind Division durch null, das Verrechnen unverträglicher Typen, Zugriff auf eine nicht definierte Variable und misslungene Umwandlungen. Beachte, dass Python zwischen Gross- und Kleinschreibung unterscheidet: callMe und callme sind zwei verschiedene Namen.

Logische Fehler

Syntax- und Laufzeitfehler sind angenehm, weil Python dich sofort darauf hinweist. Logische Fehler sind heimtückischer: Das Programm läuft durch und liefert ein Ergebnis, nur ist es falsch.

x = 3
y = 4
durchschnitt = x + y / 2
print(durchschnitt)
Was hier schiefging

Aufgaben

Aufgabe 6.1

Korrigiere den Syntaxfehler, sodass das Programm die Summe der Zahlen von 1 bis 10 ausgibt.

PythonLoading editor…
print(1 + 2 + 3 + 4 + 5 + 6 7 + 8 + 9 + 10)
Aufgabe 6.2

Korrigiere den Laufzeitfehler, sodass in der ersten Zeile Hello und in der zweiten Joe steht.

PythonLoading editor…
print("Hello")
username = Joe
print(username)
Aufgabe 6.3

Korrigiere die Syntaxfehler, sodass das Programm die Temperatur ausgibt.

PythonLoading editor…
temperatur : "23.4 Grad"
print("Heute ist es" temperatur)
Aufgabe 6.4

Alle drei Programme sollen 19 ausgeben. Entscheide für jedes, ob ein Syntaxfehler, ein Laufzeitfehler oder ein logischer Fehler vorliegt.

PythonLoading editor…
# A
print(9 10)

# B
primt(9 + 10)

# C
print(9 * 10)
Aufgabe 6.5

In jedem der zehn Ausschnitte steckt ein Fehler. Trage in der Tabelle S für Syntaxfehler, L für Laufzeitfehler oder G für logischen Fehler ein. Eine Begründung brauchst du nicht.

# A
print(5 +)

# B
alter = 15
print(Alter)

# C
umfang = 2 * 3.14 + 5

# D
print("Hallo"

# E
print(10 / 0)
# F
x = 5
print("x ist " + x)

# G
laenge = 4
breite = 3
flaeche = laenge + breite

# H
zahl = int("drei")

# I
durchschnitt = (2 + 4 + 6) / 2

# J
class = "3d"
ABCDEFGHIJ
PythonLoading editor…

Weitere Aufgaben

Zusatzaufgabe 6.6

Du kaufst Milch für 2 Franken und Fleisch für 4 Franken. Auf beides kommt eine Steuer von 3 Prozent. Schreibe ein Programm, das die Gesamtkosten ausgibt. Baue absichtlich zuerst einen logischen Fehler ein, indem du die Steuer nur auf ein Produkt rechnest, und korrigiere ihn danach.

PythonLoading editor…
Zusatzaufgabe 6.7

Korrigiere die folgenden Zeilen und erkläre jeweils, um welche Fehlerart es sich handelt.

PythonLoading editor…
print("Summe: " + 5)
for i in range(3) print(i)
Zusatzaufgabe 6.8

Schreibe ein Programm, das den Durchschnitt von drei eingelesenen Zahlen berechnet. Teste es mit den Werten 3, 4 und 5 sowie mit 0, 0 und 0. Beschreibe, warum solche Testfälle wichtig sind und welchen Testfall du zusätzlich wählen würdest.

PythonLoading editor…
Zusatzaufgabe 6.9

Suche im Internet nach der Fehlermeldung IndentationError und finde heraus, wodurch sie entsteht. Baue ein Programm, das genau diesen Fehler auslöst.

PythonLoading editor…