[Python-de] traceback abspeichern

Martin v. Loewis martin at loewis.home.cs.tu-berlin.de
Fri Apr 20 01:11:34 EDT 2001


> Ist es möglich ein traceback-Object auf Platte zu bannen, um den erzeugten
> File dann per email zur Analyse auf einem anderen Rechner weiterzuleiten?

Von Haus aus nicht, zumindest nicht mit pickle: tracebacks lassen sich
nicht pickeln.

Du kannst das Pickeln erzwingen, indem Du für alle interessanten Typen
was bei copy_reg registrierst, etwa

def pickle_traceback(tb):
  return new_traceback, (tb.tb_frame, tb.tb_lasti, tb.tb_lineno, tb.tb_next)

copy_reg.pickle(types.TracebackType, pickle_traceback)

Das musst Du natürlich für alle Typen machen, also auch Frames,
Code-Objekte, etc.

>   in der gleichen Python-Umgebung lese ich das Ganze ein und kann es
> analysieren

Das ist das Problem: Man kann tracebacks nicht programmatisch
erzeugen, muss aber beim Pickeln eine Konstruktor-Funktion
angeben. Deshalb empfehle ich

class new_traceback:
  def __init__(self, frame, lasti, lineno, next):
    self.tb_frame = frame
    self.tb_lasti = lasti
    self.tb_lineno = lineno
    self.tb_next = next

Das macht zwar keinen richtigen Traceback, aber viele
Analysefunktionen werden glücklich sein.

Wenn's einigermassen funktioniert, wäre ich an einer Kopie
interessiert.

Ciao,
Martin



More information about the Python-de mailing list