[Twisted-Python] Thoughts on Deferred

Clark C. Evans cce at clarkevans.com
Thu Mar 6 02:19:28 EST 2003


On Thu, Mar 06, 2003 at 01:18:01AM -0500, Itamar Shtull-Trauring wrote:
| In fac, the cross-over behaviour is designed to mimic Python's
| try/except semantics in a callback oriented way. And exceptions are
| *useful*.
| 
|  try:
|      x = foo(2)
|  except FooError:
|      x = None
| 
| becomes:
| 
|  d = foo(2)
|  def err(f):
|      f.trap(FooError)
|      return None
|  d.addErrback(err).addCallback(gotX)

You just proved my point; and I agree this is very useful.  ;)

By using addErrback and addCallback as distinct calls you are infact
*disabling* the cross-over behavior (which is confusing anyway) and just
using the Deferred stack in a linear way.  You only get the 'cross-over'
behavior if you use addCallbacks or addBoth, the latter, IMHO, being
somewhat deceptive since it is equivalent to addErrback _followedby_
addCallback, and I would have expected the opposite since callback
comes before errback in the arguments to addCallbacks.

I'm talking about a refactor which would clean up the innerds of
the Deferred mechanism... without changing any of the exposed 
behavior... besides being easier to explain.

Grins,

Clark




More information about the Twisted-Python mailing list