So I am constantly "losing" my tracebacks when my defer's callbacks throw exceptions that aren't caught. When I get an uncaught exception (caught via twisted.log.addObserver()) I am basically storing the Failure instance and then later, when it's safe for me to do so, calling fail.raiseException() - but the Failure's 'tb' property is None.

I traced this down to the code in Deferred._runCallbacks() which does a try: / except: with::

    self.result = failure.Failure()

Seems like this code should say::

    exc_type, exc_value, exc_traceback = sys.exc_info()
    self.result = failure.Failure(exc_value, exc_type, exc_traceback)


I'm dealing with two issues:
1) trying to generically log stack traces that happen
2) provide sane stack traces to my team who is fairly new to twisted

I can see how this might possibly leak if the tracebacks are holding onto references to local variables or something, but maybe cleanFailure() fixes that? I don't know.

Alec

_______________________________________________
Twisted-Python mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to