On 2021-02-23 23:05, Caleb Donovick wrote:
What is the motivation for returning `None` on empty splits?  I feel like this creates an unnecessary asymmetry.  I don't personally have a use case for the this feature so I may be missing something but it seems like it would force an annoying pattern:

```
try:
     foo()
except ExceptionGroup as eg:
     g1, g2 = eg.split(predicate)
     for e in g1:
         handle_true(e)
     for e in g2:
         handle_false(e)
```
Would need to be written:
```
try:
     foo()
except ExceptionGroup as eg:
     g1, g2 = eg.split(predicate)
     if g1 is not None:
         for e in g1:
             handle_true(e)
     if g2 is not None:
         for e in g2:
             handle_false(e)
```

Also this creates an subtle difference with subgroup:

```
g1, g2 = eg.split(predicate)
h1, h2  = eg.subgroup(predicate), eg.subgroup(lambda e: not predicate(e))
assert g1 == h1 and g2 == h2 # only true if `None not in {g1, g2}`
```

.subgroup returns an ExceptionGroup and .split returns 2 of them.

ExceptionGroup isn't iterable (it's mentioned in the "Rejected Ideas" section), so your code wouldn't work anyway.

On Mon, Feb 22, 2021 at 4:47 PM Irit Katriel via Python-Dev <python-dev@python.org <mailto:python-dev@python.org>> wrote:


    Hi all,

    We would like to request feedback on PEP 654 -- Exception Groups and
    except*.

    https://www.python.org/dev/peps/pep-0654/
    <https://www.python.org/dev/peps/pep-0654/>

    It proposes language extensions that allow programs to raise and
    handle multiple unrelated
    exceptions simultaneously, motivated by the needs of asyncio and
    other concurrency libraries,
    but with other use cases as well.

    * A new standard exception type, ExceptionGroup, to represent
    multiple exceptions with
       shared traceback.
    * Updates to the traceback printing code to display (possibly
    nested) ExceptionGroups.
    * A new syntax except* for handling ExceptionGroups.

    A reference implementation (unreviewed) can be found at:
    https://github.com/iritkatriel/cpython/pull/10
    <https://github.com/iritkatriel/cpython/pull/10>

    Thank you for your help

_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/U7A4PZE7SSDFNKAFZZ3BZBLL7VGTOWVL/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to