New submission from Eric Engestrom <eric.engest...@gmail.com>:
We have a pytest that boils down to the following: ``` #from __future__ import annotations from inspect import Parameter, signature def foo(x: str) -> str: return x + x def test_foo(): expected = ( Parameter("x", Parameter.POSITIONAL_OR_KEYWORD, annotation=str), ) actual = tuple(signature(foo).parameters.values()) assert expected == actual ``` (execute with `pip install pytest && pytest -vv test_foo.py`) I tried importing 3.10 annotations (so that we can get rid of quotes around the class containing `foo()`, which is omitted here because it isn't necessary to reproduce the bug), but doing so changes the output of `inspect.signature()` but not the output `inspect.Parameter()`, causing a mismatch between the two that breaks the test. The above passes on 3.7.9, 3.8.7 & 3.9.1, and if I uncomment the first line, it fails on those same versions. As can be expected, the annotations import is a no-op on 3.10.0a5 and the test passes either way. I expect `inspect` might have not been correctly updated to support postponed annotations, but I haven't looked at the implementation (I'm not familiar with the CPython codebase at all) so it's just a guess. ---------- components: Library (Lib) messages: 387875 nosy: 1ace priority: normal severity: normal status: open title: __future__.annotations breaks inspect.signature() type: behavior versions: Python 3.7, Python 3.8, Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue43355> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com