Forums Neueste Beiträge
 

Exceptions in __init__

19/02/2008 - 18:36 von Matthias Kluwe | Report spam
Hallo!

Wie geht man eigentlich korrekt mit Ausnahmen in __init__ um? Im
folgenden Beispiel wird das Objekt nicht vollstàndig initialisiert, da
(künstlich eingebaut) eine Ausnahme erzeugt wird:

class Test:
def __init__(self, value):
if value=="":
raise Exception()
self.value = value
def __del__(self):
print "Value was:", self.value

try:
t = Test("")
except:
print "Exception raised"

Die Ausgabe ist:

Exception raised
Exception exceptions.AttributeError: "Test instance has no attribute
'value'" in <bound method Test.__del__ of <__main__.Test instance at
0xb7d868ec>> ignored
Value was:

Offenbar wird, obwohl __init__ durch 'raise' verlassen wird, dennoch
t.__del__ aufgerufen, was ich nicht erwartet hàtte.

Also: Wie macht man's korrekt?

Gruß,
Matthias
 

Lesen sie die antworten

#1 André Malo
19/02/2008 - 20:04 | Warnen spam
* Matthias Kluwe wrote:

Offenbar wird, obwohl __init__ durch 'raise' verlassen wird, dennoch
t.__del__ aufgerufen, was ich nicht erwartet hàtte.



Nun ja, das Objekt wird von __new__ konstruiert, nicht von __init__.

Also: Wie macht man's korrekt?



__del__ entsprechend gestalten. U.u. kann man auch t.value auf Klassenebene
vorbelegen (das ist meistens meine Strategie).

nd
"Solides und umfangreiches Buch"

<http://pub.perlig.de/books.html#apache2>

Ähnliche fragen