Python and returns

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
newc0mer
User
Beiträge: 15
Registriert: Sonntag 20. Juli 2008, 14:21

Hallo,

ich habe eine Frage zu return(s) in python. erlaubt python nicht mehr als ein return statement in einer funktion? hier das beispiel, wie ich es meine:

Code: Alles auswählen

	if False == check.error:
			return False
		
	return True
Darf ich nur ein Return-Statement in einer Funktion haben?
Wenn ich das Programm laufen lasse, dann ist es kein Problem, aber epyDoc meldet:

Code: Alles auswählen

SyntaxError: 'return' outside function
wieso?

gruss,
newc0mer
problembär

Wo ist denn Deine Funktion ("def myfunc():")?
BlackJack

@newc0mer: Python erlaubt beliebig viele ``return``-Anweisungen innerhalb einer Funktion. Die Fehlermeldung sagt ja aber, dass das ``return`` eben nicht *in* einer Funktion steht. Ausserhalb von Funktionen macht's halt keinen Sinn. Was sollte da auch passieren!?

Dein Beispiel ist mit Tabs eingerückt -- wahrscheinlich hast Du irgendwo Tabs und Leerzeichen gemischt und der Code sieht nur richtig eingerückt aus. Darum empfiehlt der Style Guide auch vier Leerzeichen pro Ebene und keine Tabs.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

@BlackJack: Warum verlinkst du ihn denn nich direkt?
Python Style Guide - PEP8

@OP: Dein Code ist im uebrigen auch schlecht.
Mal stufenweise verbessert:

Code: Alles auswählen

if check.error == False:
    return False       
return True

Code: Alles auswählen

if not check.error:
    return False
return True

Code: Alles auswählen

return check.error
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

cofi hat geschrieben:

Code: Alles auswählen

return check.error
Zur Not noch ein bool drum:

Code: Alles auswählen

return bool(check.error)
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
newc0mer
User
Beiträge: 15
Registriert: Sonntag 20. Juli 2008, 14:21

hallo

sry, hab n bisschen zeit gebraucht.

also, ich habe alles nochmals durchgelesen und bemerkt, dass ich was vergessen habe. die angesprochene thematik bezieht sich auf epyDoc. Das Programm an sich wird korrekt interpretiert und ausgeführt. nur die doku generierung mit epydoc nicht und gibt die besagte fehlermeldung aus. hier noch die gesamte funktion:

Code: Alles auswählen

def defaultSet(self):
				"""
      Load the default set.
				"""

        check = readYaml()

        if False == check.msg_error:
            return check
		
	return objcheck(True, '', '', '', '')
ich denke es ist ein bug in epydoc und ich muss es wohl so lassen.[/code]
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Nein, das Problem ist, dass du nicht immer gleich einrückst. PEP8 empfiehlt, immer vier Leerzeichen pro Einrückung zu nehmen. In der letzten Zeile sind es auch vier Leerzeichen, in den Zeilen 7 und 9 dagegen acht. In Zeile 10 fügst du als Einrückung zu den bereits acht Leerzeichen vier hinzu. Wegen dieser Inkonsistenz kann der Interpreter nur raten, wie du denn eigentlich einrücken möchtest.
newc0mer
User
Beiträge: 15
Registriert: Sonntag 20. Juli 2008, 14:21

ich denke das ist nur ein copy&paste fehler (vom editor in den browser).

habe mit vim :set list verwendet und geschaut, dass die anz abstände überall gleich viele sind - hat nichts geändert...
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Du vermischt nicht nur die Einrückungstiefe, sondern auch Leerzeichen mit Tabs. Das erkennt man, wenn man deinen Beitrag zitiert und mit dem Cursor drüber geht. Die Einrückung ist bei Python nun mal elementar. Woanders kannst du ja auch nicht eine öffnende und zwei schließende Klammern haben. Mag sein, dass der Parser hier keinen IndentationError erkennt, aber auch ich denke, dass es an der Einrückung liegt.
newc0mer hat geschrieben:

Code: Alles auswählen

return objcheck(True, '', '', '', '')
Das erinnert mich übrigens mehr an irgendwelche "NULL-Argumente" in C als an Python. Ich möchte wahrscheinlich gar nicht wissen, was `objcheck` tut...
Antworten