Seite 1 von 1

Python and returns

Verfasst: Sonntag 27. Dezember 2009, 18:21
von newc0mer
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

Verfasst: Sonntag 27. Dezember 2009, 18:27
von problembär
Wo ist denn Deine Funktion ("def myfunc():")?

Verfasst: Sonntag 27. Dezember 2009, 18:27
von 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.

Verfasst: Sonntag 27. Dezember 2009, 20:07
von cofi
@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

Verfasst: Sonntag 27. Dezember 2009, 23:26
von jbs
cofi hat geschrieben:

Code: Alles auswählen

return check.error
Zur Not noch ein bool drum:

Code: Alles auswählen

return bool(check.error)

Verfasst: Dienstag 29. Dezember 2009, 21:40
von newc0mer
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]

Verfasst: Dienstag 29. Dezember 2009, 21:55
von derdon
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.

Verfasst: Mittwoch 30. Dezember 2009, 23:19
von newc0mer
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...

Verfasst: Mittwoch 30. Dezember 2009, 23:32
von snafu
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...