from twisted.internet import defer def c(res): print "HELLO!" raise Exception() return 2 def f(_): print "HANDLED!" return _ def end(_): print "END!" return _.value def new_f(_): print "HANDLED 2!" return _ def a(): l = defer.Deferred() l.addCallbacks(c, new_f) d = defer.Deferred() d.addCallback(c) d.addErrback(f) #if you comment this line all works as expected d.chainDeferred(l) d.addErrback(end) return d a().callback(2)