HOWTO · Python
Python Return Outside Function Fehler beheben
So beheben Sie den Rückgabefehler außerhalb der Funktion in Python.
Auf dieser Seite
Wenn Python SyntaxError: 'return' outside function meldet, verschieben Sie die return-Anweisung in einen Funktionskörper. Python weist ein return auf Modulebene beim Parsen der Datei zurück, bevor das Programm ausgeführt wird. Prüfen Sie die Einrückung und den umgebenden def-Block. Rufen Sie auf Modulebene die Funktion auf und verwenden Sie ihren Rückgabewert.
Den Fehler return outside function verstehen
Das Schlüsselwort return gibt einen Wert aus der aktuellen Funktion an den Code zurück, der sie aufgerufen hat. Syntaktisch zulässig ist es nur innerhalb eines Funktionskörpers. Steht eine return-Anweisung auf Modulebene, löst Python einen SyntaxError mit der Meldung 'return' outside function aus.
Der Parser prüft die gesamte Datei, bevor er sie ausführt. Deshalb verhindert ein return auf Modulebene, dass selbst vorherige Anweisungen in der Datei ausgeführt werden. Die Meldung verweist auf die return-Zeile, aber die Ursache kann eine falsch platzierte Anweisung weiter unten oder eine Einrückung sein, durch die der Funktionsblock früher als beabsichtigt endet. Zum Beispiel führt die ungültige Anweisung return 10 auf Modulebene zu diesem Parserfehler:
SyntaxError: ‘return’ outside function
return in eine Funktion verschieben
Schreiben Sie die Anweisung auf derselben Einrückungsebene wie die übrigen Anweisungen in der Funktion. Rufen Sie die Funktion anschließend aus Code auf Modulebene auf. Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
def calculate_total(price, quantity):
return price * quantity
print(calculate_total(8, 3))
24
Hier gehört return price * quantity zu calculate_total. Beim Aufruf werden 8 und 3 als Argumente übergeben. Der Rückgabewert wird dann an print übergeben. Ersetzen Sie die Berechnung und die Argumente durch die Aufgaben, die Ihre eigene Funktion ausführen soll.
Eine Bedingung oder Schleife erzeugt nicht von selbst eine Funktion. Sie können return innerhalb eines if-, for- oder while-Blocks nur verwenden, wenn dieser Block innerhalb einer Funktion liegt. Das folgende zusätzliche Beispiel ist syntaktisch gültig, wird aber nicht durch die bereitgestellten Ausführungsnachweise abgedeckt:
def first_match(items):
for item in items:
if item == "target":
return item
return None
print(first_match(["other", "target", "later"]))
Die Zeile return item steht sowohl innerhalb der Funktion als auch innerhalb des if-Blocks. Sobald ein passendes Element gefunden wird, beendet sie first_match; beim Aufruf wird daher "target" an print übergeben. Wenn kein Element passt, wird das abschließende return None ausgeführt. Erreicht eine Funktion ihr Ende ohne return, gibt sie ebenfalls implizit None zurück.
Einrückung und Funktionsdefinition prüfen
Python verwendet Einrückungen, um zu bestimmen, welche Anweisungen zu einer Funktion gehören. Eine Zeile auf derselben Ebene wie def steht außerhalb der Funktion; eine darunter eingerückte Zeile gehört zum Funktionskörper. Wenn Sie direkt nach def get_value(): ausrücken, hat die Funktion keinen Körper. Python meldet dann einen Einrückungsfehler statt SyntaxError: 'return' outside function. Damit der gemeldete Fehler auftritt, geben Sie der Funktion zuerst eine gültige Anweisung im Funktionskörper, zum Beispiel pass, und setzen Sie danach return 5 an den linken Rand. Diese letzte Zeile ist nun ein return auf Modulebene. In der korrigierten Form bleibt return 5 unter def get_value(): eingerückt. Verwenden Sie eine einheitliche Einrückung, üblicherweise vier Leerzeichen, und prüfen Sie die Zeilen direkt oberhalb der gemeldeten Stelle, um herauszufinden, wo der Funktionsblock endet.
Prüfen Sie außerdem, ob der Funktionskopf gültig ist und mit einem Doppelpunkt endet. Zum Beispiel ist my_function(): fehlerhaft, weil def fehlt. Python meldet einen Syntaxfehler für diesen Funktionskopf, statt die Zeile als Funktion zu behandeln, deren return außerhalb des Funktionskörpers steht. Ein falsch geschriebener oder unvollständiger Funktionskopf kann daher eine andere Fehlermeldung verursachen. Korrigieren Sie zuerst den Funktionskopf und stellen Sie dann sicher, dass die return-Zeile darunter eingerückt ist. Entscheidend ist die Frage, ob die Anweisung tatsächlich in einem Funktionskörper steht.
Auf Modulebene einen Funktionsaufruf verwenden
Code auf Modulebene ist der Teil einer Python-Datei, der sich nicht innerhalb einer Funktion oder Klasse befindet. Er kann eine Funktion aufrufen, ihren Rückgabewert einer Variablen zuweisen und diesen Wert ausgeben oder anderweitig verwenden. Schreiben Sie zum Beispiel answer = calculate_total(8, 3) und verwenden Sie anschließend answer. Schreiben Sie auf Modulebene nicht return calculate_total(8, 3).
Prüfen Sie beim Debuggen die von Python angegebene Zeile und ihre Einrückung im Verhältnis zum nächsten def. Ist die Zeile bereits eingerückt, suchen Sie nach einer früheren Ausrückung, die den Funktionskörper beendet hat. Ist die Funktionsdefinition selbst fehlerhaft, beheben Sie diesen Syntaxfehler gesondert. Sobald das return zur vorgesehenen Funktion gehört, rufen Sie die Funktion aus dem umgebenden Code auf Modulebene auf. So bleibt der Unterschied klar: Eine Funktion gibt einen Wert zurück, und der übrige Programmcode verwendet diesen Wert.