Guten Abend,
ich habe eine Klasse programmiert die IDLE zu einem Restart bringt, wenn ich sie initialisiere und mir mit dir(obj) die Attribute anschauen will. Schreibe ich ein kleines Skript das das selbe wie in IDLE von Hand gemacht bekomme ich auf der Konsole folgende Ausgabe zu sehen
albert@albert:~/Dropbox/programmieren> python temp.py
Exception RuntimeError: 'maximum recursion depth exceeded in __subclasscheck__' in <type 'exceptions.AttributeError'> ignored
Exception RuntimeError: 'maximum recursion depth exceeded in __subclasscheck__' in <type 'exceptions.AttributeError'> ignored
Exception RuntimeError: 'maximum recursion depth exceeded while calling a Python object' in <type 'exceptions.KeyError'> ignored
Exception RuntimeError: 'maximum recursion depth exceeded in __subclasscheck__' in <type 'exceptions.AttributeError'> ignored
Exception RuntimeError: 'maximum recursion depth exceeded in __subclasscheck__' in <type 'exceptions.AttributeError'> ignored
Exception RuntimeError: 'maximum recursion depth exceeded while calling a Python object' in <type 'exceptions.KeyError'> ignored
[Liste mit den Attributen]
Ich habe so gar keinen Plan woran das liegen könnte! Vielleicht kann mir hier jemand den stubs in die richtige Richtung geben?
Mit freundlichen Grüßen
Albertus
Seltsammer Fehler
-
0x1cedd1ce
- User
- Beiträge: 31
- Registriert: Sonntag 3. Oktober 2010, 12:21
Das ist ganz klar, du hast ein Funktion die sich selbst aufruft. Das ist eigentlich nichts besonderes, aber deine Funktion kommt nie zu einem Ende, sondern ruft sich solange selbst auf, bis ein limit "max recursion depth" erreicht ist. Poste mal den Code der entsprechenden Funktion, dann kann man dir weiterhelfen. Also "__subclasscheck__" ist wahrscheinlich das Problem
Problem ich habe "__subclasscheck__" in meiner Klasse nicht definiert0x1cedd1ce hat geschrieben:Das ist ganz klar, du hast ein Funktion die sich selbst aufruft. Das ist eigentlich nichts besonderes, aber deine Funktion kommt nie zu einem Ende, sondern ruft sich solange selbst auf, bis ein limit "max recursion depth" erreicht ist. Poste mal den Code der entsprechenden Funktion, dann kann man dir weiterhelfen. Also "__subclasscheck__" ist wahrscheinlich das Problem
Mit freundlichen Grüßen
Albertus
-
BlackJack
@albertus: Irgendwie. Mehr kann ich ohne Quelltext oder Glaskugel nicht sagen...
-
0x1cedd1ce
- User
- Beiträge: 31
- Registriert: Sonntag 3. Oktober 2010, 12:21
Genau jetzt währe der Zeitpunkt um dein Source loszuwerden.
Ok es wird Zeit den Source loszuwerden aber nicht mehr heute dafür reicht die Zeit nicht mehr aber Morgen im laufe des Vormitags0x1cedd1ce hat geschrieben:Genau jetzt währe der Zeitpunkt um dein Source loszuwerden.
Mit freundlichen Grüßen
Albertus
Albertus
Guten Abend,
ich habe es doch noch geschafft den Fehler einzugrenzen es liegt an die Implementierung von __getattr__. Mit folgender Testklasse lest sich der Fehler reproduzieren:
Mir ist auch klar warum das schief gehen muss ich rufe getattr auf um den Namen des Attributs zurückzugeben das ruft dann wiederum __getattr__ und so weiter. Das hat man von schnellen Hacks!
ich habe es doch noch geschafft den Fehler einzugrenzen es liegt an die Implementierung von __getattr__. Mit folgender Testklasse lest sich der Fehler reproduzieren:
Code: Alles auswählen
class Test(object):
def __init__(self,):
self.a = 1
self.b = 2
def __getattr__(self, name):
print "Test", name
if hasattr(self, name):
return getattr(self, name)
def bar(self, x ):
return self.a * x + self.b
x = Test()
dir(x)
Mit freundlichen Grüßen
Albertus
Albertus
__getattr__ ist nicht das, was du hier willst, du willst properties. Zumal getattr __getattr__ aufruft. Und schau dir mal die Dokumentation zu hasattr an.
Grüße ...
bwbg
Grüße ...
bwbg
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
