[Twisted-Python] Raising exception from a Deferred canceller.

exarkun at twistedmatrix.com exarkun at twistedmatrix.com
Thu Aug 29 06:06:59 MDT 2013


On 10:18 am, terry at jon.es wrote:
>Hi Kai
>
>[snip]
>
>2b) there is some kind of exception when
>cancel calls the cancellation function.  I don't think 2a) is really an
>exception situation, so it makes sense, as you say, just to return 
>False
>from cancel in this case. It's basically the cancel function saying it 
>was
>too late to do anything about the underlying operation but not 
>providing
>more information than that. Internally raising and catching
>CancellationFailedError (as in your code) in that case seems good to 
>me.
>In the case of 2b) I would just let the exception bubble up to the 
>calling
>code. Agreed, it could break some existing code, but isn't that 
>existing
>code already subject to that exact failure? It's just currently
>undefined/undocumented.

This seems like a bad behavior that we should fix.  Allowing arbitrary 
exceptions from other application code here makes it a lot harder to 
write robust code that uses Deferred cancellation.

Beyond that, how much code has already been written that uses this 
feature?  If it was written based on the (admittedly, meager) 
documentation that exists for the feature, then it won't have exception 
handling.

We could leave the behavior as it is and document it and require all of 
that code be updated and all future code be written to handle arbitrary 
exceptions from a cancel call.  Or we could get rid of the undocumented 
exception case, make the existing code correct (if it was previously 
correct based on documented behavior) and avoid making things more 
difficult for all future users of Deferred cancellation.

In my experience, there are usually a lot of subtle concerns and tricky 
corner cases when fixing an inconsistency between documentation and 
implementation.  This case seems like a much more clear-cut win to just 
fix the implementation.

Jean-Paul




More information about the Twisted-Python mailing list