21.6 Traceback-Objekte – traceback 

Das Modul traceback existiert zum Umgang mit dem sogenannten Traceback-Objekt. Ein Traceback-Objekt hält den Kontext fest, aus dem eine Exception geworfen wurde, und liefert damit die Informationen, die bei einem Traceback auf dem Bildschirm angezeigt werden. Zu diesen Informationen gehört vor allem die Funktionshierarchie, der sogenannte Callstack. Ein Traceback-Objekt wird beim Werfen einer Exception automatisch erzeugt. Generell können Sie auf das Traceback-Objekt einer gerade abgefangenen Exception über die Funktion sys.exc_info des Moduls sys zugreifen. Im Folgenden sollen die im Modul traceback enthaltenen Funktionen besprochen werden. Dabei werden alle Beispiele im folgenden Kontext ausgeführt:
>>> import traceback >>> import sys >>> def f1(): ... raise TypeError ... >>> def f2(): ... f1() ... >>> try: ... f2() ... except TypeError: ... tb = sys.exc_info()[2] ... >>> tb <traceback object at 0xb7c49414>
Es existiert also ein Traceback-Objekt tb, das den Callstack einer TypeError-Exception beschreibt, die zuvor aus einer verschachtelten Funktionshierarchie heraus geworfen wurde.
traceback.print_tb(traceback[, limit[, file]])
Gibt den Stacktrace des Traceback-Objekts formatiert auf dem Bildschirm aus. Über den optionalen Parameter limit kann angegeben werden, wie viele Einträge des Stacktraces maximal ausgegeben werden sollen. Für den dritten, optionalen Parameter kann ein geöffnetes Dateiobjekt übergeben werden, in das der Stacktrace geschrieben wird. Standardmäßig wird in den Stream sys.stderr geschrieben.
>>> traceback.print_tb(tb) File "<stdin>", line 2, in <module> File "<stdin>", line 2, in f2 File "<stdin>", line 2, in f1
traceback.print_exception(type, value, traceback[, limit[, file]])
Diese Funktion gibt einen vollständigen Traceback auf dem Bildschirm aus. Die Ausgabe ist genau so formatiert wie die einer normalen, nicht abgefangenen Exception. Für die beiden zusätzlichen Parameter type und value müssen Exception-Typ und Exception-Wert übergeben werden. Die restlichen Parameter haben dieselbe Bedeutung wie bei print_tb. So könnte beispielsweise der Funktionsaufruf von print_exception im interaktiven Modus folgendermaßen aussehen:
>>> traceback.print_exception(TypeError, "Hallo Welt", tb) Traceback (most recent call last): File "<stdin>", line 2, in <module> File "<stdin>", line 2, in f2 File "<stdin>", line 2, in f1 TypeError: Hallo Welt
traceback.print_exc([, limit[, file]])
Wie print_exception, jedoch immer für die aktuell abgefangene Exception. Die Parameter limit und file haben dieselbe Bedeutung wie bei print_tb. Beachten Sie, dass diese Funktion nur innerhalb eines except-Zweiges aufgerufen werden kann.
>>> try: ... raise TypeError ... except TypeError: ... traceback.print_exc() ... Traceback (most recent call last): File "<stdin>", line 2, in <module> TypeError
traceback.format_exc([limit])
Diese Funktion arbeitet wie print_exc, mit dem Unterschied, dass der formatierte Traceback nicht auf dem Bildschirm bzw. in eine Datei ausgegeben, sondern als String zurückgegeben wird.
traceback.print_last([, limit[, file]])
Diese Funktion arbeitet wie print_exception, jedoch immer für die zuletzt abgefangene Exception. Diese Funktion kann auch außerhalb eines except-Zweiges aufgerufen werden.
>>> traceback.print_last() Traceback (most recent call last): File "<stdin>", line 2, in <module> File "<stdin>", line 2, in f2 File "<stdin>", line 2, in f1 TypeError
traceback.extract_tb(traceback[, limit])
Gibt eine Liste von aufbereiteten Stacktrace-Einträgen des Traceback-Objekts traceback zurück. Ein aufbereiteter Stacktrace-Eintrag ist ein Tupel der folgenden Form:
(Dateiname, Zeilennummer, Funktionsname, Text)
Der optionale Parameter limit hat die gleiche Bedeutung wie bei print_tb.
>>> traceback.extract_tb(tb) [('<stdin>', 2, '<module>', None), ('<stdin>', 2, 'f2', None), ('<stdin>', 2, 'f1', None)]
traceback.format_list(lst)
Die Funktion format_list bekommt eine Liste von Tupeln übergeben, wie sie beispielsweise von der Funktion extract_tb zurückgegeben wird. Aus diesen Informationen erzeugt format_list eine Liste von aufbereiteten Strings der folgenden Form:
>>> traceback.format_list(traceback.extract_tb(tb)) [' File "<stdin>", line 2, in <module>\n', ' File "<stdin>", line 2, in f2\n', ' File "<stdin>", line 2, in f1\n']
traceback.format_exception_only(type, value)
Formatiert eine Exception mit dem Typ type und dem Wert value zu einer Liste von Strings. Jeder der in dieser Liste enthaltenen Strings repräsentiert eine Zeile der Ausgabe.
>>> traceback.format_exception_only(TypeError, "Hallo Welt") ['TypeError: Hallo Welt\n']
traceback.format_exception(type, value, tb[, limit])
Formatiert eine Exception mit dem Typ type, dem Wert value und dem Stacktrace tb zu einer Liste von Strings. Jeder String dieser Liste repräsentiert eine Zeile der Ausgabe. Der Parameter limit hat die gleiche Bedeutung wie bei der Funktion print_tb.
>>> traceback.format_exception(TypeError, "Hallo Welt", tb)
['Traceback (most recent call last):\n', ' File "<stdin>", line 2, in <module>\n', ' File "<stdin>", line 2, in f2\n', ' File "<stdin>", line 2, in f1\n', 'TypeError: Hallo Welt\n']
traceback.format_tb(tb[, limit])
Der Aufruf dieser Funktion ist äquivalent zu format_list(extract_tb(tb, limit)).