kein R

23/08/2007 - 23:10 von Tim-Christian Mundt | Report spam
Hallo,

ich knoble seit einiger Zeit an einem merkwürdigen Problem: Ich habe eine
Applikation, die im Wesentlichen so aufgebaut ist: Hauptklasse zum
Initialisieren etc. und StateManager, der verschiedene States
(Programmzustànde) verwaltet. Um das Programm zu beenden, will ich sauber
alle Objekte entfernen (unter anderem, da ich mit Bibliotheken arbeite,
die sauber beendet werden wollen). Ich laufe also im StateManager durch
die Liste aller States (im Moment nur einer) und del sie. Ich bin mit
einem Debugger mitgelaufen: Python arbeitet die __del__ des States ab.
Danach kehrt es jedoch nicht zur aufrufenden Methode zurück.

Hat jemand eine Idee, woran das liegen könnte?

Ein klein wenig konkreter:

def clean(self):
for i in range(len(self._activeStates))
self._activeStates.pop()

Nach dem pop() springt Python in die __del__ des States, führt sie aus und
kommt nie wieder... Einen Fehler gibt es nicht in der __del__, denn da
steht gerade nur pass.

Ich wette, Euch fàllt dazu etwas ein. Gute Nacht erstmal,
Tim-Erwin
 

Lesen sie die antworten

#1 Marc BlackJack Rintsch
23/08/2007 - 23:50 | Warnen spam
On Thu, 23 Aug 2007 21:10:44 +0000, Tim-Christian Mundt wrote:

ich knoble seit einiger Zeit an einem merkwürdigen Problem: Ich habe eine
Applikation, die im Wesentlichen so aufgebaut ist: Hauptklasse zum
Initialisieren etc. und StateManager, der verschiedene States
(Programmzustànde) verwaltet. Um das Programm zu beenden, will ich sauber
alle Objekte entfernen (unter anderem, da ich mit Bibliotheken arbeite,
die sauber beendet werden wollen). Ich laufe also im StateManager durch
die Liste aller States (im Moment nur einer) und del sie. Ich bin mit
einem Debugger mitgelaufen: Python arbeitet die __del__ des States ab.
Danach kehrt es jedoch nicht zur aufrufenden Methode zurück.



Welche aufrufende Methode? `__del__()` wird vom Interpreter aufgerufen.
Oder auch nicht. Du solltest Dir mal in der Doku durchlesen was diese
Methode alles *nicht* garantiert. IMHO ist `__del__()` genauso sinnlos
wie `finally()` in Java. Wenn die externen Bibliotheken aufgeràumt werden
müssen, dann stell lieber eine Methode zur Verfügung, die man explizit
aufrufen muss.

Ciao,
Marc 'BlackJack' Rintsch

Ähnliche fragen