[Python-Dev] exception chaining
Benjamin Peterson
benjamin at python.org
Fri Jan 20 21:56:27 CET 2012
2012年1月20日 Ethan Furman <ethan at stoneleaf.us>:
> Benjamin Peterson wrote:
>>>> 2012年1月20日 Ethan Furman <ethan at stoneleaf.us>:
>>>>>> Summary:
>>>>>> Exception Chaining is cool, unless you are writing libraries that want to
>>> transform from Exception X to Exception Y as the the previous exception
>>> context is unnecessary, potentially confusing, and cluttery (yup, just
>>> made
>>> that word up!).
>>>>>> For all the gory details, see http://bugs.python.org/issue6210.
>>>>>> I'm going to attempt a patch implementing MRAB's suggestion:
>>>>>> try:
>>> some_op
>>> except ValueError:
>>> raise as OtherError() # `raise` keeps context, `raise as` does not
>>>>>> I dislike this syntax. Raise what as OtherError()? I think the "raise
>> x from None" idea is preferable, since it indicates you are nulling
>> the context. The optimal solution would be to have "raise X
>> nocontext", but that would obviously require another keyword...
>>> Raise 'the error' as OtherError.
Where 'the error' is? Aren't you trying to override the current error?
>> The problem I have with 'raise x from None' is it puts 'from None' clear at
> the end of line -- not a big deal on this very short example, but when you
> have actual text it's not as obvious:
>> except SomeError():
> raise SomeOtherError('explanatory text with actual %data to help track
> down the problem' % data) from None
>> Of course, I suppose that same issue exists with the 'raise x from exc'
> syntax, and 'from None' certainly matches that better...
Exactly!
--
Regards,
Benjamin
More information about the Python-Dev
mailing list