On Wed, May 18, 2022 at 12:24 PM Serhiy Storchaka <storchaka@gmail.com> wrote:
try:
     expression block
expect Exception if condition else ():
     expression block

That's an interesting idea I haven't seen before, but it doesn't work if the condition you want to test depends on the exception object, which in my experience it often does.

Some of OP's examples are of that form: for instance, in setuptools/sandbox.py:

    try:
        ...
    except SystemExit as v:
        if v.args and v.args[0]:
            raise
        # Normal exit, just return

In pip/_internal/utils/misc.py:

    try:
        os.makedirs(path)
    except OSError as e:
        # Windows can raise spurious ENOTEMPTY errors. See #6426.
        if e.errno != errno.EEXIST and e.errno != errno.ENOTEMPTY:
            raise

I suppose the right way to implement it would be to support PEP 622 patterns in except clauses.

    except case SystemExit(args=args) if not args or not args[0]:
        pass  # Normal exit, just return

    except case OSError(errno = errno.EEXIST | errno.ENOTEMPTY):
        # Windows can raise spurious ENOTEMPTY errors. See #6426.
        pass