Issue44799
Created on 2021-07-31 17:19 by tkomiya, last changed 2022-04-11 14:59 by admin. This issue is now closed.
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 27553 | closed | uriyyo, 2021-08-02 13:23 | |
| Messages (4) | |||
|---|---|---|---|
| msg398650 - (view) | Author: Komiya Takeshi (tkomiya) * | Date: 2021-07-31 17:19 | |
I found `typing.get_type_hints()` raises TypeError for a variable annotated by `dataclasses.InitVar` when lazy annotations evaluation-feature is enabled (a.k.a `__future__.annotations`).
```
$ cat test.py
from __future__ import annotations
from dataclasses import dataclass, InitVar
from typing import get_type_hints
@dataclass
class Foo:
attr: InitVar[int]
get_type_hints(Foo)
```
```
$ python -V
Python 3.9.6
$ python test.py
Traceback (most recent call last):
File "/Users/tkomiya/work/sphinx/test.py", line 10, in <module>
get_type_hints(Foo)
File "/Users/tkomiya/.pyenv/versions/3.9.6/lib/python3.9/typing.py", line 1424, in get_type_hints
value = _eval_type(value, base_globals, localns)
File "/Users/tkomiya/.pyenv/versions/3.9.6/lib/python3.9/typing.py", line 290, in _eval_type
return t._evaluate(globalns, localns, recursive_guard)
File "/Users/tkomiya/.pyenv/versions/3.9.6/lib/python3.9/typing.py", line 545, in _evaluate
type_ =_type_check(
File "/Users/tkomiya/.pyenv/versions/3.9.6/lib/python3.9/typing.py", line 164, in _type_check
raise TypeError(f"{msg} Got {arg!r:.100}.")
TypeError: Forward references must evaluate to types. Got dataclasses.InitVar[int].
```
It goes well if lazy annotations evaluation is disabled.
|
|||
| msg411228 - (view) | Author: Jelle Zijlstra (JelleZijlstra) * ![]() |
Date: 2022-01-22 03:31 | |
I think this should be fixed in typing.py instead. get_type_hints() should be less strict about what it accepts as a type, so users are free to use annotations in innovative ways. Static type checkers should have the job of enforcing that type annotations are valid types. |
|||
| msg414969 - (view) | Author: Jelle Zijlstra (JelleZijlstra) * ![]() |
Date: 2022-03-12 03:36 | |
This is now fixed in main thanks to bpo-46644: ``` >>> get_type_hints(Foo) {'attr': dataclasses.InitVar[int]} ``` We're not backporting that change to the bugfix branches. If we want to fix this issue in 3.10 and 3.9, we'll have to add a `__call__` method to `InitVar`. My inclination is that that's not worth it. |
|||
| msg414974 - (view) | Author: Eric V. Smith (eric.smith) * ![]() |
Date: 2022-03-12 06:46 | |
I agree it's not worth fixing in 3.9 and 3.10. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:59:48 | admin | set | github: 88962 |
| 2022-03-12 18:00:32 | JelleZijlstra | set | status: open -> closed resolution: fixed stage: patch review -> resolved |
| 2022-03-12 06:46:13 | eric.smith | set | messages: + msg414974 |
| 2022-03-12 03:36:25 | JelleZijlstra | set | messages:
+ msg414969 versions: - Python 3.8 |
| 2022-01-22 03:31:18 | JelleZijlstra | set | nosy:
+ JelleZijlstra messages: + msg411228 |
| 2021-08-02 15:00:49 | eric.smith | set | assignee: eric.smith |
| 2021-08-02 14:21:08 | eric.smith | set | nosy:
+ eric.smith |
| 2021-08-02 13:23:20 | uriyyo | set | keywords:
+ patch nosy: + uriyyo pull_requests:
+ pull_request26060 |
| 2021-07-31 17:19:44 | tkomiya | create | |
