2009-08-08 9 views
5

J'essaie de consigner des exceptions dans Python 2.5, mais je ne peux pas le faire. Toutes les fonctions de formatage font autre chose que ce que je veux.Convertir les informations d'exception Python en chaîne pour la journalisation

je suis venu avec ceci:

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

sys.excepthook = logexception 

mais il renfloue avec une erreur d'argument lorsqu'il est appelé, bien que selon les docs il devrait fonctionner. Quelqu'un sait-il quel est le problème avec ceci ou avez une autre solution drop-in?

Répondre

5

Pourquoi cet argument traceback avoir une méthode format_exception comme la fonction dans le module de retraçage dont le nom, il est usurpé, et si elle avait un pourquoi cette méthode nécessitera le même objet sur lequel il est appelé à passer comme dernier argument?

Je suppose que vous voulez juste donner le troisième argument un nom différent, pour ne pas cacher le module de retraçage, disent:

import sys 
import traceback 

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

sys.excepthook = logexception 

et les choses devraient fonctionner beaucoup mieux.

+0

C'est embarrassant. Une de ces erreurs que vous ne pouvez pas repérer dans votre propre code, mais quelqu'un d'autre le fait instantanément. :) Merci. –

+2

Depuis que j'ai soumis la même réponse (une minute plus tard), je vais supprimer ma réponse. Par souci de complétude: puisque type comme argument ombrage aussi un builtin je pense qu'il devrait aussi être renommé en exc_type ou autre ... – ChristopheD

+0

True. J'ai renommé ça aussi. Je vous remercie. –

Questions connexes