Ken Jin <kenjin4...@gmail.com> added the comment:
@Serhiy, this doesn't just affect typing.Union, it seems that the rest of the typing types don't substitute: >>> (int | T)[typing.List[str]] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Each union arg must be a type, got typing.List[str] We should probably loosen the check during the union_getitem substitution -- no need to raise the TypeError or check for is_union, just blindly replace the TypeVar. We already do this for types.GenericAlias: >>> list[T][1] list[1] Or if you want to continue checking, maybe checking for PyCallable_Check(obj) in substitution is enough - typing internally accepts callable(o) too: https://github.com/python/cpython/blob/3.10/Lib/typing.py#L146 ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue44653> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com