2009-08-08 13 views
5

Ich versuche, Ausnahmen in Python 2.5 zu protokollieren, aber ich kann es nicht tun. Alle Formatierungsfunktionen machen etwas anderes als was ich will.Konvertieren Python-Ausnahmeinformationen in Zeichenfolge für Protokollierung

kam ich mit auf den Punkt:

def logexception(type, value, traceback): 
    print traceback.format_exception(type, value, traceback) 

sys.excepthook = logexception 

aber es bürgt mit einem Argument Fehler, wenn genannt, obwohl die Dokumentation nach sollte es funktionieren. Weiß jemand, was das Problem ist oder eine andere Drop-In-Lösung?

Antwort

5

verwenden Warum sollte das traceback Argument eine format_exception Methode haben ebenso wie die Funktion im Traceback-Modul, dessen Name es usurpiert, und wenn es eine hatte, warum würde das Verfahren erfordern das gleiche Objekt, an dem es auch als letztes Argument übergeben wird?

Ich vermute, Sie wollen nur das dritte Argument einen anderen Namen geben, um nicht das Zurückverfolgungsmodul zu verstecken, sagen:

import sys 
import traceback 

def logexception(type, value, tb): 
    print traceback.format_exception(type, value, tb) 

sys.excepthook = logexception 

und Dinge sollten viel besser arbeiten.

+0

Es ist peinlich. Einer dieser Fehler, die Sie nicht in Ihrem eigenen Code finden können, aber jemand anderes tut dies sofort. :) Vielen Dank. –

+2

Da ich dieselbe Antwort (eine Minute später) eingereicht habe, lösche ich meine Antwort. Der Vollständigkeit halber: Da Typ als Argument auch ein Built-in schattiert, sollte es wohl auch in exc_type oder was auch immer umbenannt werden ... – ChristopheD

+0

True. Ich habe das auch umbenannt. Vielen Dank. –