New submission from Valerio G <vg0377...@gmail.com>:
I encountered one condition where calling get_type_hints causes infinite recursion when dealing with forward declaration and cyclic types. Here's an example: from typing import Union, List, get_type_hints ValueList = List['Value'] Value = Union[str, ValueList] class A: a: List[Value] get_type_hints(A, globals(), locals()) This reaches the recursion limit as of 3.8.0b2. It seems that the combining _GenericAlias with ForwardRef is what triggers this condition: ForwardRef._evaluate sets __forward_value__ on its first call on a given instance _GenericAlias tries to compare its args post evaluation If one of the arguments is a previously evaluated forward reference containing a cycle, then it will infinitely recurse in the hash function when building a frozen set for the comparison. The above is, of course, a very artificial example, but I can imagine this happening a lot in code with trees or similar structures. My initial reproduction case was using _eval_type to resolve forward references returned by get_args (side note: it would be nice to have a public function to do that). ---------- components: Library (Lib) messages: 349330 nosy: vg0377467 priority: normal severity: normal status: open title: Infinite recursion with typing.get_type_hints versions: Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue37806> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com