def in def will andere def nicht öffnen

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.
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

def in def will andere def nicht öffnen

Beitragvon Andyh » Sonntag 17. Februar 2008, 15:26

Hallo

Ich habe mal wieder ein tolles Problem, besonders weil ich weiss das es geht es aber nicht will.

Code: Alles auswählen

            def laden():
                print "Laden Dialog geöffnet"
               
                def laden1(datei1 = "data"):
                   
                    global datei2
                    datei2 = datei1
                    try:
                        datei = file(datei2, "r")
                        global line
                        for line in datei.readlines():
                            neuladen(datei2)
                            print line
                        print "Datei geladen"
                           
                    except:
                        print "Ladefehler"
                   
                    print" "
                       
                fenster2=Toplevel()
                fenster2.geometry('500x300')
                fenster2.title('Turbo-NC 1.0 Beta!!! PRG laden')
                fenster2.label=Label(fenster2,text='Programm einladen', font= font0)
                fenster2.label.pack()
                fenster2.label2=Label(fenster2,text='Das Programm muss eine .txt sein und muss',font= font1)
                fenster2.label2.pack()
                fenster2.label3=Label(fenster2,text='im Programmverzeichnis sein              ',font= font1)
                fenster2.label3.pack()
                e1=Entry(fenster2, font = font1)
                e1.pack()
                fenster2.button1=Button(fenster2,text='Bestätigen',font = font2, command=lambda: laden1(str(e1.get())))                                       
                fenster2.button1.pack()   
                fenster2.mainloop()

            def neuladen(datei2):
                fenster.listbox.insert(END, datei2)


Falls euch der code bekannt vorkommt: ja ist auch so

Das Problem ist in Zeile 12 die def neuladen(datei2) wird nicht gefunden(NameError: name 'neuladen' is not defined).

Die def neuladen kommt erst danach, wurde aber schon einmal überlesen.
Es macht auch keinen unterschied ob sie davor steht.

Achso sie steht in gleicher reihe wie def laden()

Gruß
Andyh
Zuletzt geändert von Andyh am Sonntag 17. Februar 2008, 15:43, insgesamt 1-mal geändert.
BlackJack

Beitragvon BlackJack » Sonntag 17. Februar 2008, 15:35

Tja also ich sehe nicht wo der Name `neuladen` herkommen sollte. Python sieht das anscheinend genau so.

Und die ``global``\s sehen krank bis gefährlich aus.
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Beitragvon Andyh » Sonntag 17. Februar 2008, 15:41

Hallo

Ich wollte die neuladen nicht auch noch mit rein stecken(wegen der Länge)

hab sie reingemacht (nur die ersten 2 zeilen der rest steht eh in try)

Gruß
Andyh
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Beitragvon Zap » Montag 18. Februar 2008, 09:38

Warum sind die Methoden eigentlich so unglaublich weit nach rechts gerückt? .. das lässt nichts gutes erahnen.
Ich meine auch das wir dir schonmal empfohlen haben von Funktionen bzw Methoden zu reden und nicht von "def's".
Vielleicht zeigst du uns mal das Modul in seiner ganzen schönheit und bist in Zukunft ein bisschen weniger Beratungsresistent ;)
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Montag 18. Februar 2008, 11:04

Ich sehe da oben ein 'from Tkinter import *' und ein einzelnes 'except' gibts auch dort. Und ich wette, er arbeitet mit IDLE.

Python sorgt in keinster Weise für guten Code! :(
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Montag 18. Februar 2008, 12:29

audax hat geschrieben:Python sorgt in keinster Weise für guten Code! :(

Für guten Code kann nur der Entwickler selbst sorgen. Für lesbaren Code sorgt Pythons Syntax im Rahmen ihrer Möglichkeiten durchaus, aber auch da ist der Entwickler gefragt, vernünftig damit umzugehen. Und jetzt stell' dir obigen Code und dessen Formatierungsliebe nochmal in anderen Programmiersprachen vor ;)
lunar

Beitragvon lunar » Montag 18. Februar 2008, 17:25

Y0Gi hat geschrieben:Und jetzt stell' dir obigen Code und dessen Formatierungsliebe nochmal in anderen Programmiersprachen vor ;)

Python erzwingt wenigstens noch Einrückungen. Bei anderen Sprachen muss man den Anfängern sowas überhaupt erstmal mühsam beibringen ;)
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Beitragvon Andyh » Montag 18. Februar 2008, 17:30

Hallo

Ja schön ist was anderes(ist ja erst mal nur ein test). Ich werde das noch änderen, damit ich auch noch in 2 Jahre noch durchblicke.

Den Code lagere ich nach der Pizza die gerade aus dem Offen kommt aus :D

CODE: http://paste.pocoo.org/show/28643/

Ja ich habe einen * import

Gruß
Andyh der jetzt immer schön Funktion schreibt
Zuletzt geändert von Andyh am Montag 18. Februar 2008, 18:19, insgesamt 1-mal geändert.
lunar

Beitragvon lunar » Montag 18. Februar 2008, 17:38

Sternchen-Import entfernen, globals entfernen, geschachtelte Funktionen entfernen. Dann verschwindet auch das Problem.
BlackJack

Beitragvon BlackJack » Montag 18. Februar 2008, 17:44

Der Kommentar ist herrlich:

Code: Alles auswählen

#!!!!!Alle Variablen immer als global kenzeichnen!!!!!


Du hast keine einzige richtige Funktion geschrieben. Funktionen bekommen Werte als Argumente und geben Ergebniss als Rückgabewerte zurück. Du hast nur Codeabschnitten, die globale Variablen benutzen, Namen gegeben.

Und es gibt tatsächlich kein `neuladen()` als Funktion. Das ist eine "Methode" der "Klasse" `fenster`. Die da mal sehr komisch platziert ist, und soweit ich das sehe wird auch nie eine Instanz davon erzeugt.
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Beitragvon Andyh » Montag 18. Februar 2008, 18:52

Hallo

Danke erstmal! Ich habe den Code ein bischen umstrukturiert.
* import ist erst mal geblieben(kommt noch weg, aber nicht mehr heute)
Funktionen sind entschachtelt

http://paste.pocoo.org/show/28649/

Was ist an globalen Variablen eigentlich so schlecht? Ich finds ganz nützlich.

Aber geht immer noch nicht.

Fehler:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
return self.func(*args)
File "C:/Python25/CNC neu/Tkinker test1.py", line 85, in <lambda>
fenster2.button1=Button(fenster2,text='Bestätigen',font = font2, command=lambda: laden1(str(e1.get())))
NameError: global name 'laden1' is not defined

Noch eine Frage:

Wie könnte ich das noch besser strukturieren? (will ja was lehrenen)

Gruß
Andyh
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 18. Februar 2008, 18:59

Andyh hat geschrieben:* import ist erst mal geblieben(kommt noch weg, aber nicht mehr heute)

Antwort kommt auch, aber auch nicht mehr heute.

Andyh hat geschrieben:Was ist an globalen Variablen eigentlich so schlecht? Ich finds ganz nützlich.

Sie machen den Programmfluss übersiichtlich. Das wird in MITs 600.1 gleich in der ersten Stunde gelehrt. Ausführliche Antwort kommt dann morgen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Montag 18. Februar 2008, 19:03

Hoi,

Andyh hat geschrieben:Was ist an globalen Variablen eigentlich so schlecht? Ich finds ganz nützlich.

[wiki=Die_global-Anweisung]Das ist zwar nicht ganz, was ich schreiben würde, trifft aber den Punkt durchaus.[/wiki]

Gruß,
Christian
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Beitragvon Andyh » Montag 18. Februar 2008, 19:08

Hallo

Gut ihr habt mich überzeugt "global kommt nicht mehr ins Haus"

Antwort kommt auch, aber auch nicht mehr heute.

Ausführliche Antwort kommt dann morgen.


Das wahr nicht böse gemeint , ich muss halt auch noch was anderes tuhen. Komme immer um 17 Uhr von der Arbeit und "sollte" um 22 Uhr wieder schlafen, und jeder von euch weiss was man alles halt so machen muss.

Gruß
Andyh
lunar

Beitragvon lunar » Montag 18. Februar 2008, 19:13

* import ist erst mal geblieben(kommt noch weg, aber nicht mehr heute)

Dieser Import ist momentan auch dein geringstes Problem.

Funktionen sind entschachtelt

Nichts ist entschachtelt:

Code: Alles auswählen

class programm
 |
 +-> def __init__
 |
 +-> def run
      |
      +-> class fenster
           |
           +-> def laden1
           |
           +-> def neuladen
           |
           +-> def testfenster
           |
           +-> def laden


Wie könnte ich das noch besser strukturieren? (will ja was lehrenen)

Kauf dir ein Buch über objektorientierte Programmierung und lese es durch. Dadurch lernst du mehr als wenn dir jemand dieses Programm vorkauen würde.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder