Thank you a lot for pointing me to the Twisted doc-s, but we're discussing the following snippet:
return ( self.abc1(). addErrback(self.handleFailure1). addCallback(self.abc2,args). addCallback(self.abc3). addErrback(self.handleFailure2) ) def abc1(self): if t.test() is None: raise Exception("Error11") else: d = defer.Deferred() d.callback(1) return d and basically, I've expected in case of exception self.handleFailure1() to be called, but I don't see it happen. cheers. Quoting "Paul Goins" <gene...@vultaire.net>: > Hello, > >>>> On Oct 21, 2009, at 4:12 PM, vit...@synapticvision.com wrote: >>>> >>>>> hi, >>>>> how can I chain in defer methods that could raise exception while >>>>> showing the exception that coming from method? > > This is covered in the Twisted documentation. There's 3 pages I often > have reviewed when confused about something: > > 1. Asynchronous Programming with Twisted > (http://twistedmatrix.com/projects/core/documentation/howto/async.html) > 2. Deferred Reference > (http://twistedmatrix.com/projects/core/documentation/howto/defer.html) > 3. Generating Deferreds > (http://twistedmatrix.com/projects/core/documentation/howto/gendefer.html) > > Specifically, the most relevant is the Visual Explanation: > http://twistedmatrix.com/projects/core/documentation/howto/defer.html#auto2 > This should give you the info you need, but I'll explain a little more > anyway. > >>>>> I mean, if I'll do: >>>>> return ( >>>>> adc1().abc2().abc3().addErrback("Common2AllException") >>>>> ) >>>>> than "Common2AllException" will be raised if abc1() raise Exception, >>>>> but I'd like to see the adc1() own exception (and not >>>>> "Common2AllException") ? > > If abc1 raises an exception, it's going to go through each step of the > callback/errback chain until it finds an errback. If the only thing you > have is attached at the very end, then that's where the exception will > be handled. > >> the issue is if adc1() will raise up an exception, than following it >> .addErrback() will never be called cause adc1() will exit or raise >> Exception. > > Let's say that your abc() was returning a Deferred. In this case, doing > abc().addErrback("Common2AllException") would make sense. However, your > example either returns 1 (not a Deferred), or it raises an Exception. > Neither one will chain like this. The example is bad. > > If you can provide a better example, please do. In any case, please > review the documentation, especially the "visual explanation" I > mentioned above. And finally, do a search on the web for "twisted > inlineCallbacks decorator" - that makes writing a lot of Deferred-using > code much easier, and helped me out a lot as a beginner. > > - Paul > > > _______________________________________________ > Twisted-Python mailing list > Twisted-Python@twistedmatrix.com > http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python > _______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python