2009-08-08 13 views
5

Provo a registrare le eccezioni in Python 2.5, ma non riesco a farlo. Tutte le funzioni di formattazione fanno qualcosa di diverso da quello che voglio.Converti informazioni di eccezione Python in stringa per la registrazione

sono arrivato fino a questo:

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

sys.excepthook = logexception 

ma balle fuori con un errore argomento quando chiamato, anche se in base ai documenti dovrebbe funzionare. Qualcuno sa qual è il problema con questo o ha un'altra soluzione drop-in?

risposta

5

Perché che traceback argomento dovrebbe avere un metodo format_exception proprio come la funzione nel modulo traceback il cui nome è usurpare, e se avesse un motivo per cui sarebbe che il metodo richiede lo stesso oggetto su cui è chiamato ad essere passato come ultimo argomento?

ho il sospetto che si desidera solo per dare il terzo argomento un nome diverso, in modo da non nascondere il modulo traceback, dicono:

import sys 
import traceback 

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

sys.excepthook = logexception 

e le cose dovrebbero funzionare molto meglio.

+0

È imbarazzante. Uno di quegli errori che non riesci a individuare nel tuo codice, ma qualcun altro lo fa all'istante. :) Grazie. –

+2

Dato che ho inviato la stessa risposta (un minuto dopo) cancellerò la mia risposta. Per completezza: poiché il tipo come argomento ombreggia anche un builtin, penso che dovrebbe anche essere probabilmente rinominato in exc_type o qualsiasi altra cosa ... – ChristopheD

+0

True. L'ho ribattezzato anch'io. Grazie. –