RuntimeError: maximum recursion depth exceeded while calling

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
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Hi Alle, ich hab mal wieder ein Problem, welches ich einfach nicht schaffe zu lösen:

Undzwar rufe ich ein Modul auf, welches in eine Datei schreiben soll. Das is ja nicht besonders schwer und hat auch bis heute kein Problem gemacht, doch jetzt kommt folgende Fehlermeldung:
dat = open('configurations.config.txt', "w")
RuntimeError: maximum recursion depth exceeded while calling a Python object
t
Ich hab jetzt seit zwei Stunden versucht das Problem zu lösen aber es will nicht. Das Problem tritt sogar auf, wenn ich den Code so vereinfache:

Code: Alles auswählen

def write_setting():
	dat = open('configurations.config.txt', "w") 
	dat.close()
Außerdem habe ich versucht den gleichen Code in meinem Hauptprogramm auszuführen, was wunderbar funktioniert hat.
Kann mir jemand einen Tipp geben?
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Guck mal nach, was genau open ist. Vermutlich hast du das irgendwo überschrieben.
Trubinial Guru hat geschrieben:Ich hab jetzt seit zwei Stunden versucht das Problem zu lösen aber es will nicht. Das Problem tritt sogar auf, wenn ich den Code so vereinfache:

Code: Alles auswählen

def write_setting():
	dat = open('configurations.config.txt', "w") 
	dat.close()
Da fehlt aber noch der Rest des codes. Wenn du schon ein Beispiel postest dann bitte alles und vereinfacht.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Trubinial Guru hat geschrieben:
dat = open('configurations.config.txt', "w")
RuntimeError: maximum recursion depth exceeded while calling a Python object
t
Ich vermute, dass du irgendwo open überschrieben hast. Das passiert gerne bei Sternchen-Importen, also bei bösen Konstrukten wie

Code: Alles auswählen

from foo import *
Was sagt denn ein

Code: Alles auswählen

print open
?
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Danke für die Antworten erstmal
Die Ausgabe von print open ist: <built-in function open>
Sternchen import hab ich leider nicht benutzt - daran sollte es also nicht liegen.
Da fehlt aber noch der Rest des codes. Wenn du schon ein Beispiel postest dann bitte alles und vereinfacht.
Der Code steht gerade genau so in meinem Programm, den Rest zu posten wäre glaub eher Kontraproduktiv.
BlackJack

@Trubinial Guru: Ausserdem ist der Traceback nicht komlett. Die Zeilen davor verraten ja was wo aufgerufen wurde.

Wo hast Du das ``print open`` hingeschrieben? Direkt vor den Aufruf der fehl schlägt?
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

File "gui_starter.py", line 391, in update_labels
self.update_labels()
Dieser Teil wiederholt sich öfters, dann kommt

File "gui_starter.py", line 390, in update_labels
self.default_settings()
File "gui_starter.py", line 209, in default_settings
configurations.configurations.write_setting(new_settings)
File "/home/jonathan/Desktop/Beispielprogramm/Test/configurations/configurations.py", line 19, in write_setting
print open
RuntimeError: maximum recursion depth exceeded while getting the str of an object
In update_labels wird default_settings() aufgerufen, von wo aus das modul configurations geladen wird.

Das alles zu posten wäre unmöglich, weil der code viel zu lang wäre.
Ach und das print open wurde direkt davor geschrieben.
BlackJack

@Trubinial Guru: Na dann liegt der Fehler ja aber nicht in `open()` sondern in der Methode die offenbar immer wieder rekursiv aufgerufen wird. In `update_labels()` scheinst Du irgend etwas zu machen was wieder zum rekursiven Aufruf von `update_labels()` führt.
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Vielen Dank! Ich hab den Fehler gefunden. Er war wie du vermutest hast in update_labels ich hatte zwei Fehler hintereinander, die dann zu dem genannten problem geführt hatten. Vielen Dank!
Antworten