On Thu, Sep 19, 2019 at 09:03:06AM +0200, Philippe Prados wrote:

>  * You need __ror__ as well as __or__.
> No, in this situation, Python auto invoke ``__or__`` in case of ``__ror__``.

I don't think that Python will invoke ``__or__`` if the ``__ror__`` 
method is missing.

Testing in Python 3.8:

    py> class Test(object):
    ...     def __or__(self, other):
    ...             return "Called __or__ method"
    ...
    py> Test() | None  # works
    'Called __or__ method'
    py> None | Test()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unsupported operand type(s) for |: 'NoneType' and 'Test'

Unless I have missed something, you need both ``__ror__`` as well as 
``__or__`` to make it work correctly.



>  * The static types in typing are not instances of type, so you need to
> work out what to do with them.
> I do not understand the remark. My patch of 'mypy' accept this new syntax.

This is not just about mypy static checks, it is also about Python 
runtime checks.



[...]
> Where I can find the argument to explain why this have been deliberated
> removed in 3.6 ?

Try the What's New file for 3.6, and the bug tracker.


> In my implementation, they affect just Union. isinstance() can now accept
> type, Tuple or Union.

What about issubclass?


>  * What about except clauses? Shouldn’t they take unions if isinstance
> does? How does that work?
> Good question. To accept `except TypeError | ZeroDivisionError:` in place
> of `except (TypeError, ZeroDivisionError):`, the impact is bigger, but why
> not ?


I don't think this will be a problem. The except clause will accept any 
expression:

    py> try:
    ...     1/0
    ... except None or [] or 0 or ZeroDivisionError:
    ...     print("caught divide by zero")
    ...
    caught divide by zero


So long as the expression ``TypeError | ZeroDivisionError`` returns a 
subclass of BaseException, everything should Just Work with no syntax 
changes.



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

Reply via email to