[Twisted-Python] If the errbacks of a canceled Deferred are called with error other than CancelledError, is this acceptable?
glyph at twistedmatrix.com
Tue Jun 18 13:54:29 MDT 2013
On Jun 18, 2013, at 12:03 PM, Laurens Van Houtven <_ at lvh.io> wrote:
> On Tue, Jun 18, 2013 at 8:22 PM, Glyph <glyph at twistedmatrix.com> wrote:
> I would say that if we want to percolate this information up to the caller, there should be a ConnectingCancelled exception that is a subtype of the previous exception type.
> Doesn't that mean we'll have many subclasses that mean that something was cancelled?
> If I didn't take backwards compatibility into account, I would say that composing the original exception into a new CancellationError (or something) exception would be preferable. Would you agree that it would be preferable? (Again, not taking compatibility into account -- I'm trying to get compatibility vs niceness of API to face off against each other. Personally, I think it's enough of a change in functionality to warrant a chance in ways a function can fail, but there's no point in even having that argument if there's no consensus that the composed way would even be better...)
I agree that it would be preferable, but I don't see how it's possible without making Exception itself composeable.
> After all, if it's interesting that the operation was cancelled, presumably it's interesting at what stage the operation is cancelled.
> IIUC that would work the same with composition as inheritance :)
Unfortunately inheritance is built into the way Python handles exceptions. In fact in this case you almost want *multiple* inheritance, so you can say 'except CancelledError:' or 'except ConnectionError:' as appropriate. :-(
The one saving grace here is that not a whole lot of useful logic can live on the exception objects, so there's a limited amount of opportunity for getting oneself into trouble.
Please prove me wrong, though.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Twisted-Python