Jedes Computerprogramm ist -- so wie die mathematische Formelsprache -- eine formalisierte Sprache. Das heißt, jeder Buchstabe und jedes Zeichen muss strengen formalen Regeln genügen, um vom Compiler oder Interpreter der Programmiersprache korrekt verstanden zu werden.
Das heißt, bevor ein Programm überhaupt gestartet werden kann, darf es keinerlei Syntaxfehler enthalten.
Dies ist die fundamentale erste Hürde, wenn man ein funktionstüchtiges Programm schreiben möchte. Syntaxfehler sind daher die am häufigsten auftretenden Fehler und gleichzeitig auch die am einfachsten zu korrigierenden. Die jeweiligen Syntaxfehlermeldungen liefern konkrete Informationen über die Position und Art des Fehlers.
Hier ist die genaue technische Spezifikation für Python 3 zu sehen.
Bevor die weiteren Grundkonzepte genauer erklärt werden, erstmals Python's wichtiste Syntaxregeln:
Das sind Einzeiler, die aus Rechenzeichen, Variablen, eingebauten Befehlen, Klammern und sonstigen Zeichen wie einem Punkt besteht.
Ein "Call" ist ein Aufruf einer Funktion oder Instanzierung, der durch nachgestellte runde Klammern signalisiet wird -- das wird oft auch als "Befehl" bezeichnet. Innerhalb der Klammern sind die Argumente dieses Aufrufs, getrennt durch Beistriche.
Nur durch Klammen alleine können verschachtelte Aufrufe ausgedrückt werden. Sie werden von innen nach außen ausgewertet.
Ein Punkt ".
" ist ein spezielles Trennzeichen, um ein "Attribut" des zuerst angegebenen Objektes zu referenzieren -- z.B. obj.xyz
sagt, "referenziere das Attribut "xyz" des Objektes, welches durch die Variable "obj" referenziert wird.
Ist dieses Attribut aufrufbar, so kann es ganz normal mit Klammern aufgerufen werden.
Beispiele:
2 + 1.5
f(5.5)
max(1, 4, 11)
min(max(4, 1000), max(-60, 1))
geschwindigkeit.diff(x)
Beispiele für Syntaxfehler
Fehlerhaft sind u.A. Ausdrücke mit nicht-ausbalancierten Klammern, falschen Anführungszeichen und Operatoren (unäre und binäre) mit fehlenden Argumenten. Achtung, Ausdrücke können auch problemlos über mehrere Zeilen gehen.
f2((1+a)
sqrt(x + ) * sin(1 - x)
print("Hallo)
{ "abc" : [ 1, 2, 3, "xyz" : range(9) }
Das "=
" Zeichen ist von besonderer Bedeutung.
Es weist der Variablen auf der linken Seite den evaluierten Ausdruck der rechten Seite zu.
Später im Programmcode, kann auf diesen evaluierten Ausdruck durch anschreiben des Variablennames zugegriffen werden. Gleichzeitige Zuweisungen sind auch möglich, wenn links und rechts des Gleichzeitszeichens die selbe Anzahl von Elementen stehen. (Bem.: Es handelt sich hier also explizit nicht um eine Gleichung -- diese wird wenn dann eher durch ein doppeltes ==
Gleichheitszeichen ausgedrückt).
variable = <Ausdruck>
Beispiele:
apfel = 11 + 7
birne = 2 * apfel + 1
x, y = 9, 10
a = b = "gleichzeitige Zuweisung"
y = max(2, min(99, x))
v = geschwindigkeit(t = 1.4)
In Python3 gibt es darüber hinaus auch noch "extended unpacking", welches elemente einer Liste auf zugewiesene Tupel von Variablen verteilt. z.B. wird hier die 1
and a
, an b
die [2, 3]
Liste und 4
and c
zugewiesen -- der Teil in der Mitte kann beliebiger Länge sein.
>>> a, *b, c = 1,2,3,4
>>> b
[2, 3]
Beispiele für Syntaxfehler
x + y = 9
funktion2(x) = 3.14
Dabei ist zu beachten, dass es reservierte Schlüsselwörter gibt, welche nicht für Zuweisungen verwendet werden können. Diese Wöter sind essentieller Teil der Programmiersprache um die Struktur des Programmablaufs anzugeben:
and, as, assert, break, class, continue, def, del, elif, else, except, exec,
finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or,
pass, print, raise, return, try, while, with, yield
Insbesondere sticht hierbei aus der Sicht des Naturwissenschaftlers lambda
heraus.
Will man ein $\lambda$ als Variablennamen verwenden,
so wählt daher in der Praxis üblicherweise entweder lambda_
oder lmbda
.
Die genauere Bedeutung dieser eingebauten Schlüsselwörter wird im Rahmen dieses Skripts erklärt. Allgemeiner werden sie in Python's Dokumentation hier erklärt: Version 2 bzw. Version 3
Ein Codeblock ist eine zeilenweise Liste von Ausdrücken, welche allesamt gleich weit eingerückt sein müssen. Die Zeile vor so einem Block beinhaltet immer eine Funktions- oder Klassendefinition, bzw. eine Kontrollstruktur -- erkennbar an dem Doppelpunkt am Ende der Zeile.
if x > 0:
y = 2*x + 1
birne = apfel - x
Verschachtelung von eingerückten Blöcken:
def f(x):
k = 0
if x > 0:
k = k + 2*x
elif x < 0:
for i in range(-x):
k = k - i**2
x = x + (2*i + x)
Wichtig ist, dass die Einrückungen konsistent sind und am Ende eines eingerückten Blocks wieder mindestens auf das Niveau des umschließenden Blocks zurückgerückt wird.
Tipp: müheloses hin- und herrücken von Codeblöcken lässt sich so bewerkstelligen,
dass die zu verrückenden Zeilen markiert werden und die Tab
bzw. Shift-Tab
Taste gedrückt werden.
Beispiele für Syntaxfehler
while True:
x = 9
y = 11
for x in range(10):
for y in range(10):
z += x * y
print(z)
Bemerkung: Wer sich mit den syntaktischen Feinheiten von Python genauer beschäftigen will, kann dies in der offiziellen Dokumentation, bzw. Version 3 machen.
Neben diesen Syntaxfehlern (in Python: SyntaxError
) gibt es auch noch Laufzeitfehler und logische Fehler.
Ist der Syntax korrekt, kann das Programm ausgeführt werden. Während dessen kann es zu den unterschiedlichsten Problemen kommen:
Beispiele für Laufzeitfehler
8 / 0 ZeroDivisionError: integer division or modulo by zero
[1,2,3,4][5] IndexError: list index out of range
z = 1 + x NameError: name 'x' is not defined
"Hallo"(1.25) TypeError: 'str' object is not callable
float("Hallo") ValueError: could not convert string to float
Abschließend muss erwähnt werden, dass auch eigene Errors und Exceptions programmiert werden können. Dies dient dazu, dem Anwender des Programmes (bzw. dem Programmierer, der eine Programmbibliothek verwendet) eine genaue Information zu liefern, warum eine bestimmte Aktion so nicht funktioniert.
Logische Fehler sind die mühevollsten! Das sind diejenigen Fehler, wo ein Programm nicht das gewünschte Verhalten zeigt bzw. ein falsches Ergebnis liefert, aber es keinen der bisher vorgestellten Fehler ausgibt.
Beispiel für logischen Fehler
Das folgende Programm soll den Mittelwert von 3 Zahlen berechnen:
a, b, c = 9, -1, 3.3
summe = a + b + c
mittelwert = summe / 2.0
print(mittelwert)
Ergibt: 5.65
Wo ist der logische Fehler?