hallo,
Beim Durchlauf eines Skripts bekam ich folgenden Fehler:
NameError: global name 'is_Verfallsamstag_aus_timestamp' is not defined
is_Verfallsamstag_aus_timestamp ist eine Funktion, die aufgerufen wurde
und weiter unten im Skript definiert ist.
Müssen die Funktionsdefinitionen vor dem Funktionsaufruf kommen,
damit es keinen Fehler gibt? Ich meinte, das mal ausprobiert zu haben und da gab es mal nen Fehler
und mal nicht. Kann man diesen Fehler sicher vermeiden, ohne Funktionsaufrufe immer unterhalb der Funktionsdefinitionen
zu schreiben? (Voraussetzung immer, dass alles in einem Skript steht)
Name Error
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Ja, Funktionen (und alles andere auch) muessen immer vor ihrer Benutzung definiert werden. Fuer Funktionen gelten dieselben Lookup-Regeln wie fuer alles andere und die Namen koennen auch jederzeit neu gebunden werden (also stell mal fest was ueberhaupt eine Funktion ist!).
Der uebliche Ansatz ist alles in Funktionen zu kapseln und keinen Toplevel Code zu haben. Oder aber das ifmain Idiom am Ende der Datei, wenn das Skritp ausfuehrbar ist - wenn nicht solltest du dir dreimal ueberlegen ob du ueberhaupt Toplevel Code haben solltest.
Der uebliche Ansatz ist alles in Funktionen zu kapseln und keinen Toplevel Code zu haben. Oder aber das ifmain Idiom am Ende der Datei, wenn das Skritp ausfuehrbar ist - wenn nicht solltest du dir dreimal ueberlegen ob du ueberhaupt Toplevel Code haben solltest.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Hallo,
danke für die Info.
Ich teste momentan Funktionen gern Top Level,
bevor ich sie in eine Funktion packe,
weil dann das Fehlerfinden einfacher ist, die Variablen
sind ja alle noch im Speicher.
Wenn alles passt, verpacke ich das erst in die Funktion.
vermutlich gibts da auch noch nen besseren Ansatz zum Entwickeln und Debuggen,
aber ich kenne und beherrsche ihn noch nicht...
danke für die Info.
Ich teste momentan Funktionen gern Top Level,
bevor ich sie in eine Funktion packe,
weil dann das Fehlerfinden einfacher ist, die Variablen
sind ja alle noch im Speicher.
Wenn alles passt, verpacke ich das erst in die Funktion.
vermutlich gibts da auch noch nen besseren Ansatz zum Entwickeln und Debuggen,
aber ich kenne und beherrsche ihn noch nicht...
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das ist darum kein guter Ansatz, weil du etwas anderes testest als du dann spaeter verwendest. Ein Debugger ist ein besserer Ansatz - nicht zum testen, hierfuer gibt es Unittests - zum Debuggen: pdb importieren und `pdb.set_trace()` aufrufen schon hast du eine fast normale interaktive Session und kannst dir alle Werte anschauen.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte