A Failurerepresents an exception and a trace (often different from the current stack trace). You should use Failurewhen creating an asynchronous exception. So, when are you going to start Deferredwith an error or when are you going to call a method like IProtocol.connectionLostor ClientFactory.clientConnectionFailed. This is because in such cases you want to link a different stack trace except for the current stack trace.
Failure(ConnectionDone), Failure , . Failure(ConnectionDone()). Failure: Failure(). "" , , except. Failure, , .
Failure , , . sys.exc_info().
, Failure. , Python, : raise SomeException(...).