[Python-Dev] PEP 409 and the stdlib

Nick Coghlan ncoghlan at gmail.com
Tue May 21 13:23:01 CEST 2013


On Tue, May 21, 2013 at 5:17 PM, Hrvoje Niksic <hrvoje.niksic at avl.com> wrote:
> On 05/20/2013 05:15 PM, Ethan Furman wrote:
>>
>> 1)  Do nothing and be happy I use 'raise ... from None' in my own
>> libraries
>>
>> 2)  Change the wording of 'During handling of the above exception, another
>> exception occurred' (no ideas as to what at
>> the moment)
>
>
> The word "occurred" misleads one to think that, during handling of the real
> exception, an unrelated and unintended exception occurred.  This is not the
> case when the "raise" keyword is used.  In that case, the exception was
> intentionally *converted* from one type to another.  For the "raise" case a
> wording like the following might work better:
>
>     The above exception was converted to the following exception:
>     ...
>
> That makes it clear that the conversion was explicit and (hopefully)
> intentional, and that the latter exception supersedes the former.

This ship sailed long ago (it was covered by the original exception
chaining spec in PEP 3134). If you want to deliberately replace an
exception while retaining the full traceback, you use "raise X from
Y", and the intro text will change to something like "This exception
was the direct cause of the following exception:"

This thread is about the case where you want to use "raise X from
None" to suppress the display of the original exception completely,
which is a new capability in Python 3.3. So whenever we consider
changing the standard library, we should also look at the explicit
chaining option, particularly when the original exception may have
happened inside a user provided callback (including method calls)

Cheers,
Nick.

--
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia


More information about the Python-Dev mailing list