Ah, ich glaube, jetzt mit Deinem Beispiel wirds mir dann doch klar. Also, der Ablauf ist folgender:
Im try-Block wird das Objekt foo_object erzeugt. Danach wird zwangsläufig __init__ aufgerufen. In diesem Moment existiert das Objekt, wie sich ja auch dadurch zeigt, dass in Deinem Beispiel die __init__-Methode die do_something-Methode erfolgreich aufruft.
Dann wird die Exception ausgelöst. Der Python-Interpreter betrachtet den try-Block nun nicht mehr als den auszuführenden Zweig und macht die Anweisung rückgängig, durch die die Exception ausgelöst wurde (das erzeugte Objekt wird vernichtet). Dann wird der except-Zweig ausgeführt.
Stimmt das so?
Viele Grüße
cookie
class foo:
def init(self,name):
self.name=name
self.do_something()
raise RuntimeError, 'Something went wrong'
def do_something(self):
print 'If you see this sentence, then an object was actually created.'try:
foo_object = foo('huhu')
except RuntimeError, strerror:
print strerror