Error output for bad deferred method signatures?
I'm curious why errors aren't reported when deferreds are fired if the deferred method has a bad signature. For example, if the following is run: import httplib, sys from twisted.web import client from twisted.internet import reactor, threads, defer from twisted.protocols import http from twisted.python import failure class getYahoo(object): def __init__(self): factory = client.HTTPClientFactory("http://www.yahoo.com") reactor.connectTCP("www.yahoo.com",80,factory) factory.deferred.addCallback(self._gotResponse, factory) factory.deferred.addErrback(self._errSendReq, factory) self.deferred = factory.deferred def _gotResponse(self, resp, factory): print "yeah!" print resp def _errSendReq(self, err, factory): print "shucks!" print err def sendRequest(): return getYahoo().deferred if __name__ == '__main__': def test(msg): print msg print respOrErr d = sendRequest() d.addCallback(test, "success") d.addErrback(test, "failure") reactor.run() The deferred _gotResponse() and _errSendReq() fire perfectly, but the test() function in __main__ is not called for "success" or "failure". This is expected as the signature is wrong -- it should be 'test(respOrErr, msg)'. What isn't clear [to me] is why this doesn't produce an error upon firing the deferred, but instead produces an error when the reactor shuts down [via ctrl-c], which could be hours later. I have an instance of this that is more severe, where the error output is *never* produced (maybe because of threading?). Is this the expected behavior, or am I doing something atrocious to produce it? Thanks, Lenny __________________________________ Yahoo! Music Unlimited Access over 1 million songs. Try it free. http://music.yahoo.com/unlimited/
participants (2)
-
Lenny G Arbage
-
Tommi Virtanen