2009-08-08 10 views
5

Próbuję rejestrować wyjątki w Pythonie 2.5, ale nie mogę tego zrobić. Wszystkie funkcje formatowania robią coś innego, niż chcę.Konwertuj informacje o wyjątkach Pythona na ciąg do rejestrowania

wymyśliłem to:

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

sys.excepthook = logexception 

ale poręczeń się z błędem argumentu kiedy nazywa, chociaż według docs powinno działać. Ktoś wie, o co chodzi z tym problemem, czy ma inne rozwiązanie typu "drop-in"?

Odpowiedz

5

Dlaczego że traceback argument powinien mieć metodę format_exception podobnie jak funkcja w module Traceback którego nazwa to uzurpacji, a gdyby miał jedną dlaczego ta metoda wymaga ten sam obiekt, do którego jest wezwany, aby zostać przekazanym jako ostatni argument?

Podejrzewam po prostu chcesz dać trzeci argument inną nazwę, tak aby nie ukrywać moduł traceback, powiedzieć:

import sys 
import traceback 

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

sys.excepthook = logexception 

i wszystko powinno działać znacznie lepiej.

+0

To żenujące. Jeden z błędów, których nie możesz wykryć we własnym kodzie, ale ktoś inny natychmiast to robi. :) Dzięki. –

+2

Ponieważ przesłałem tę samą odpowiedź (minutę później), usunę moją odpowiedź. Ze względu na kompletność: ponieważ typ jako argument także cienie wbudowanego, myślę, że powinien również być prawdopodobnie zmieniony na exc_type lub cokolwiek ... – ChristopheD

+0

Prawda. Zmieniłem również nazwę tego. Dziękuję Ci. –