2012-01-02 16 views
6

Gdy złapię nieoczekiwany błąd z sys.excepthookPython złapać żadnego wyjątku i drukowanie lub zalogować traceback z wartościami zmiennych

import sys 
import traceback 

def handleException(excType, excValue, trace): 
    print 'error' 
    traceback.print_exception(excType, excValue, trace) 

sys.excepthook = handleException 

h = 1 
k = 0 

print h/k 

To wyjście otrzymuję

error 
Traceback (most recent call last): 
    File "test.py", line 13, in <module> 
     print h/k 
ZeroDivisionError: integer division or modulo by zero 

Jak mogę zawierać wartości zmiennych (h, k, ...) w trybie traceback w stosunku do http://www.doughellmann.com/PyMOTW/cgitb/? Kiedy dodaję wynik cgitb jest taki sam.

EDIT:

Świetna odpowiedź I tylko zmodyfikowany to tak więc rejestruje ślad w pliku

def handleException(excType, excValue, trace): 
    cgitb.Hook(logdir=os.path.dirname(__file__), 
     display=False, 
     format='text')(excType, excValue, trace) 

Odpowiedz

8

Patrząc na źródło cgitb.py, powinieneś być w stanie wykorzystać coś jak to:

import sys 
import traceback 
import cgitb 

def handleException(excType, excValue, trace): 
    print 'error' 
    cgitb.Hook(format="text")(excType, excValue, trace) 

sys.excepthook = handleException 

h = 1 
k = 0 

print h/k 
Powiązane problemy