On 02/07/2020 07:33 AM, Serhiy Storchaka wrote:
07.02.20 16:28, Ram Rachum пише:
The idea is to add `raise as` syntax, that raises an exception while setting the currently caught exception to be the cause. It'll look like this:
try: 1/0 except ZeroDivisionError: raise as ValueError('Whatever')
What it does is a shorter version of this:
try: 1/0 except ZeroDivisionError as error: raise ValueError('Whatever') from error
How does it differ from
try: 1/0 except ZeroDivisionError: raise ValueError('Whatever')
Here's a diff:
$ diff no_from.py with_from.py 3,4c3,4 - ... except ZeroDivisionError: - ... raise ValueError('Whatever') --- + ... except ZeroDivisionError as e: + ... raise ValueError('Whatever') from e 10c10 - During handling of the above exception, another exception occurred: --- + The above exception was the direct cause of the following exception:
To me the difference between "raise from" and "raise" is the implicit meaning:
- "During handling of ..." implies that the second exception should not have occurred and there is a bug in the exception handling code
- "The above exception ..." implies that this code path is normal and extra information is being supplied
Personally, my main use of "raise from" is "raise from None".
I'm -1 on the new syntax: to me it looks much more like a "raise ... from None".