die aufrufenden funktion suchen
Hallo Liste, der Verzweiflung nahe benötige ich bitte eure Hilfe. Ich will in eine exception-class die aufrufende funktion ausgeben. Ich kriegs nicht hin. Wenn ich das prog im debugger (Wing IDE) laufen lasse funktioniert es. Wenn ich das programm von der console (Terminal) aus aufrufe funktioniert es nicht. Der stack hat dann eine Länge von 1. Wo ist mein Fehler? --> class VacException(exceptions.Exception): """ Base-Exception """ def __str__(self): print '------------ exept --------------' print '##', len(inspect.stack()) for i in range(len(inspect.stack())): ps = inspect.getframeinfo(inspect.currentframe(i)) print '%2i >>> %s' % (i, ps[:3]) return self.__doc__ --< -- cu Roland M. Kruggel mailto:rk.liste@bbf7.de http:www.bbf7.de System: Intel, Debian etch, 2.6.21, xfce4, KDE 3.5 ------------ Zufallszitat Vertrauen ist das Gefühl, einem Menschen sogar dann glauben zu können, wenn man weiß, daß man an seiner Stelle lügen würde. -- Henry Louis Mencken
Roland M. Kruggel schrieb:
Ich will in eine exception-class die aufrufende funktion ausgeben.
Was meinst Du mit "aufrufende Funktion"? Die, in der die Exception geworfen wurde? Die findest Du wohl am einfachsten über das Modul traceback. http://www.python.org/doc/current/lib/module-traceback.html Die Funktion zu finden, in der die Exception instanziert wurde ist uninteressant. Da kan wo völlig anderes sein.
--> class VacException(exceptions.Exception): ... --<
Bitte komplettes Beispiel posten. -- Schönen Gruß - Regards Hartmut Goebel Goebel Consult Spezialist für IT-Sicherheit in komplexen Umgebungen http://www.goebel-consult.de
Ich kriegs nicht hin. Wenn ich das prog im debugger (Wing IDE) laufen lasse funktioniert es. Wenn ich das programm von der console (Terminal) aus aufrufe funktioniert es nicht. Der stack hat dann eine Länge von 1.
Wo ist mein Fehler?
Um Hartmuts Antwort mit anderen Worten zu sagen: Natürlich hat er das (der Stack, eine Länge von 1). Du ermittelst ja den Aufrufer von __str__, und nicht die Stelle, wo die Ausnahme ausgelöst wurde. __str__ wird aufgerufen, wenn die Ausnahme ausgegeben werden soll, und das passiert, wenn sie nicht abgefangen wurde. Das wiederum passiert, wenn der ganze Stack weg ist und der Interpreter kurz davor, zuende zu gehen. Ciao, Martin
participants (3)
-
"Martin v. Löwis"
-
Hartmut Goebel
-
Roland M. Kruggel