Unsupported converter, only named functions, types and lambdas are currently supported with higher-order function
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- Ø Merge
- 1 T. 18 Std.
- Gemergte PRs (30 T.)
- 54
Beschreibung
Bug Report
Mypy succeeds evaluating an attr converter that is an (Any) -> Any function, but fails to evaluate a converter that is returned by a higher-order function that returns an (Any) -> Any function.
To Reproduce
This works as expected:
from attr import define, field
def truncate(val):
return val[:40]
@define
class Person:
first_name: str = field(converter=truncate)
last_name: str = field(converter=truncate)
reveal_type(truncate)
Output:
scratch.py:14: note: Revealed type is "def (val: Any) -> Any"
Success: no issues found in 1 source file
But this does not:
from collections.abc import Callable
from typing import Any
from attr import define, field
def truncate(length) -> Callable[[Any], Any]:
def truncate_converter(val):
return val[:length]
return truncate_converter
@define
class Person:
first_name: str = field(converter=truncate(40))
last_name: str = field(converter=truncate(80))
reveal_type(truncate(40))
reveal_type(truncate(80))
Expected Behavior
Output:
scratch.py:20: note: Revealed type is "def (Any) -> Any"
scratch.py:21: note: Revealed type is "def (Any) -> Any"
Success: no issues found in 1 source file
Actual Behavior
Output:
scratch.py:16: error: Unsupported converter, only named functions, types and lambdas are currently supported [misc]
scratch.py:17: error: Unsupported converter, only named functions, types and lambdas are currently supported [misc]
scratch.py:20: note: Revealed type is "def (Any) -> Any"
scratch.py:21: note: Revealed type is "def (Any) -> Any"
Found 2 errors in 1 file (checked 1 source file)
Your Environment
- Mypy version used: 1.4.1
- Mypy command-line flags: just the file name, no extra flags.
- Mypy configuration options from
mypy.ini(and other config files):[tool.mypy] platform = "linux" python_version = "3.10" - Python version used: 3.10.12
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Führe zunächst den bereitgestellten Python-Reproducer mit mypy 1.4.1 aus und bestätige die Fehler bei den beiden Verwendungen von attr-Konvertern. Verfolge die Behandlung von attr-Feldkonvertern für benannte Funktionen im Vergleich zu den von truncate zurückgegebenen Funktionen und füge anschließend einen Regressionstest hinzu, der beide Aufrufe abdeckt. Als erledigt gilt die Aufgabe, wenn die höherwertigen Konverter ohne Fehler akzeptiert werden und die aufgelösten Callable-Typen weiterhin wie gezeigt aussehen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 48/100