[Twisted-Python] Try/catching yielded Exceptions and getting proper tracebacks
Terry Jones
terry at jon.es
Mon Feb 22 07:36:24 MST 2010
Hi Paul
>>>>> "Paul" == Paul Goins <general at vultaire.net> writes:
You're only printing the exception, not a full traceback, so you don't see
much. I tend to write what you're doing as follows:
from twisted.python import log
@defer.inlineCallbacks
def xmlrpc_dosomething(self):
d = self._do_something_else()
d.addErrback(log.err)
result = yield d
defer.returnValue(result)
If you try that you'll see a full traceback. The above lets log.err handle
the failure that comes back via the errback on the deferred you get from
_do_something_else, and log.err knows how to get the full traceback.
I don't know if it's clear, but whenever you call an inlineCallbacks
decorated method/func, you get a deferred back (unless you happen to
mistakenly use inlineCallbacks to decorate something that's not a
generator). You can add errbacks to that deferred, just like any other, and
if you're making the call from inside another inlineCallbacks decorated
function, you can just do as above: add call/errbacks to the deferred, and
then yield it.
Terry
More information about the Twisted-Python
mailing list