New submission from Ken Jin <kenjin4...@gmail.com>:
Union type expressions added in PEP 604 throw an error when both operands are GenericAlias objects. Eg the following works:: int | list[str] The following throws TypeError:: list[int] | dict[float, str] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for |: 'types.GenericAlias' and 'types.GenericAlias' I have submitted a PR to fix this. Coincidentally, it also fixes the fact that union expressions weren't de-duplicating GenericAlias properly. Eg:: >>> list[int] | int | list[int] list[int] | int | list[int] For non-GenericAlias type expressions, the new code shouldn't be much slower. Rich compare is only used for GenericAlias objects. This isn't very scientific, but python -m timeit "int | str | float" # original 1000000 loops, best of 5: 295 nsec per loop # purely rich compare 1000000 loops, best of 5: 344 nsec per loop # check for GenericAlias and rich compare only for that 1000000 loops, best of 5: 297 nsec per loop ---------- components: Interpreter Core messages: 380145 nosy: gvanrossum, kj, levkivskyi priority: normal severity: normal status: open title: GenericAlias does not support union type expressions versions: Python 3.10 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue42233> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com