Any discussion of except expressions should reference PEP 463 and respond to the arguments there.

https://www.python.org/dev/peps/pep-0463/

On Sun, Jan 27, 2019, 3:52 AM Alex Shafer via Python-ideas <python-ideas@python.org wrote:
Hello,

I'd like to discuss an idea I had to shorten the syntax for the common case of having a try/except/finally/else block where all of the following conditions are met:

* There is only one except block, no finally or else
* The exception is not captured in the except block, i.e. `except KeyError:` not `except KeyError as e:`
* The contents of the except block is only a single expression
* Perhaps, the expression starts with a control word such as pass, break, continue, return, raise. As it happens, everything useful I can think to do with this right now currently uses these. Unclear to me if this should be a requirement.

The syntax I envisioned would be something like the following:

try on ValueError pass:
    some_list.remove('value')


I'm not at all attached to the `on` token specifically, but I think something is necessary there.

Other examples:

def func():
    try on KeyError, ValueError return False:
        dict_of_lists['key'].remove('value')

key = 'foo'
try on KeyError raise MyApplicationError(f'{key} not found'):
    a_dict[key]



for i in range(100):
    try on TypeError continue:
        a_list[i] += 1
        etc()

I realize this could be accomplished with context managers, but that seems like overkill to simply throw away the exception, and would increase the overall required code length.

Thanks for your input!

Alex
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/