HOWTO · Python
Nichts tun innerhalb einer if-Anweisung in Python
Erfahren Sie, wie `pass` einen bedingten Zweig ohne Aktion lässt und den Block trotzdem syntaktisch gültig hält.
Auf dieser Seite
Python verlangt nach einem if-, elif- oder else-Kopf eine eingerückte Anweisung. Hat ein Zweig noch keine Aktion, können Sie ihn mit der Anweisung pass leer lassen und die Bedingungsstruktur trotzdem syntaktisch vervollständigen. Sie eignet sich als bewusster Platzhalter, überspringt aber weder die Bedingungsprüfung noch implementiert sie ein Verhalten für Sie.
Was pass in einem if-Block bewirkt
pass ist eine wirkungslose Anweisung: Wenn Python sie erreicht, führt es keine Aktion aus. Wie es danach weitergeht, richtet sich nach dem umgebenden Kontrollfluss. In einem if-Zweig wird die Ausführung nach dessen Ende hinter der Bedingungsstruktur fortgesetzt. Im Rumpf einer Schleife kann stattdessen der nächste Schleifendurchlauf beginnen. Die Bedingung wird weiterhin wie gewohnt ausgewertet.
Ein Anweisungsblock darf nicht leer sein. Zum Beispiel ist es ungültig, nach if ready: auf derselben Einrückungsebene direkt eine weitere Anweisung folgen zu lassen, um den Zweig leer zu lassen. Schreiben Sie pass in den Zweig, wenn dort absichtlich nichts geschehen soll. Dasselbe gilt für andere zusammengesetzte Anweisungen wie Schleifen, Funktionen und Klassendefinitionen: Ihre Blöcke benötigen eine Anweisung, und pass kann diese Stelle ausfüllen.
pass in einem bedingten Zweig verwenden
Ein Zweig mit pass bleibt Teil der Bedingungsstruktur. Python wertet die Bedingung aus, führt den passenden Zweig aus und fährt nach dessen Ende hinter der Bedingungsstruktur fort. Ein elif-Zweig kommt infrage, wenn die vorherigen Bedingungen falsch sind; seine eigene Bedingung muss ebenfalls wahr sein. Ein else-Zweig hat keine eigene Bedingung und wird nur ausgeführt, wenn alle vorangehenden if- und elif-Bedingungen falsch sind. pass bewirkt nicht, dass ein anderer Zweig ausgeführt wird.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
x = 10
if x > 5:
pass
else:
print("x is not greater than 5")
print("Continue with the rest of the program")
Continue with the rest of the program
Ist x auf 10 gesetzt, ist die Bedingung wahr. Python führt daher den ersten Zweig aus und erreicht darin pass. Der else-Rumpf wird übersprungen, und die abschließende print-Anweisung wird ausgeführt. Der bereitgestellte Lauf wurde erfolgreich mit Exitcode 0 abgeschlossen und gab die oben gezeigte Ausgabe aus. Die Bezeichnung in der Ausgabe bleibt auf Englisch. Wenn Sie x auf 5 oder einen kleineren Wert ändern, wird der else-Rumpf vor der letzten Anweisung ausgeführt.
Die Ausgabe des Beispiels verstehen
Das Beispiel verwendet pass nur in dem Zweig, in dem x > 5 gilt. Dieser Zweig gibt nichts aus, hält das Programm aber auch nicht an. Die spätere print-Anweisung steht außerhalb der Bedingungsstruktur und wird daher erreicht, nachdem der jeweilige Zweig beendet ist. Ist x höchstens 5, gibt der else-Zweig vor dieser späteren Anweisung eine Meldung aus.
Dieser Unterschied ist wichtig, wenn Sie die Ausgabe nachvollziehen: Eine wirkungslose Anweisung in einem Zweig unterdrückt keine Anweisungen, die nach der Bedingungsstruktur folgen. Ebenso wird ein Zweig, dessen Bedingung nicht zutrifft, einfach nicht ausgewählt. Soll das Programm etwas anderes anzeigen, ergänzen Sie die gewünschte Aktion im passenden Zweig, statt zu erwarten, dass pass die Bedingung oder andere Anweisungen beeinflusst.
Wann pass sinnvoll ist und wann eine andere Anweisung passt
Verwenden Sie pass, wenn ein Zweig vorhanden sein muss, seine Implementierung aber absichtlich aufgeschoben wird, etwa beim Entwurf einer Funktion oder solange noch nicht feststeht, wie eine bestimmte Eingabe behandelt werden soll. Sobald das gewünschte Verhalten bekannt ist, ersetzen Sie den Platzhalter durch die passende Implementierung. Bis dahin geschieht in diesem Zweig stillschweigend nichts. Aus den umgebenden Namen oder einem knappen Kommentar sollte hervorgehen, warum er vorhanden ist.
pass ist keine Möglichkeit, funktionierenden Code zum Testen oder Debuggen vorübergehend zu deaktivieren. Die Anweisung bewahrt den deaktivierten Code nicht auf und lässt den Zweig auch nicht so wirken, als wäre seine Bedingung falsch. Steuern Sie den Ablauf beim Debuggen mit einer gezielten Bedingung oder einem Debugger. Um Code vorübergehend aufzubewahren, nutzen Sie eine geeignete Änderung in der Versionsverwaltung oder mit Bedacht einen Kommentar.
Wählen Sie eine andere Anweisung, wenn das Programm tatsächlich reagieren soll. Mit return verlassen Sie eine Funktion und geben einen Wert oder ausdrücklich keinen Wert zurück; continue wechselt zum nächsten Schleifendurchlauf, und break beendet eine Schleife. Diese Anweisungen ändern den Kontrollfluss; pass tut das nicht. Wenn überhaupt keine zweigspezifische Aktion erforderlich ist, prüfen Sie, ob sich die Bedingungsstruktur vereinfachen lässt, statt einen leeren Zweig beizubehalten.