[Twisted-Python] Counting errors in a DeferredList and avoiding Unhandled error in Deferred messages

Jean-Paul Calderone exarkun at divmod.com
Mon May 5 13:38:13 EDT 2008


On Mon, 5 May 2008 19:10:39 +0200, Terry Jones <terry at jon.es> wrote:
>If I pass a list of deferreds to DeferredList and want to add a callback to
>the DeferredList to look at whatever errors have occurred in the underlying
>deferreds, should I do something like this:
>
>  deferreds = []
>  for x in whatever:
>    deferreds.append(funcReturningDeferred(x))
>
>  dl = DeferredList(deferreds)
>  dl.addCallback(errorCheckingFunc)
>
>  for d in deferreds:
>    d.addErrback(lambda _: pass)
>
>
>This ensures that errorCheckingFunc gets defer.FAILURE for those deferreds
>that finished up in their errback chain. Adding the lambda _: pass errback
>to each deferred in deferreds after it has been passed to DeferredList
>makes sure the errback chain doesn't later reach its end with an unhandled
>error.
>
>It that the right/best/approved way to handle needing to deal with errors
>in the callback of a DeferredList and not trigger the "Unhandled error in
>Deferred" message?
>

You can do this (if you replace `pass´ with `None´, anyway) or you can
pass `consumeErrors=True´ to the `DeferredList´ initializer which will
make it do something equivalent.

Jean-Paul



More information about the Python-list mailing list