python / python/mypy

Type narrowing does not apply to default arguments in definition time

Offen
#13,087 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug topic-runtime-semantics topic-variable-scope
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Bug Report

The default values for function parameters are evaluated during definition, and late-bound defaults aren't a thing yet, so type narrowing should work for them just fine.

To Reproduce

# demo.py
from typing import Optional

foo: Optional[int] = 42
assert foo is not None
reveal_type(foo)  # demo.py:5: note: Revealed type is "builtins.int"

def bar(arg: int = foo) -> None:  # demo.py:7: error: Incompatible default for argument "arg" (default has type "Optional[int]", argument has type "int")
    ...

Expected Behavior

There should be no error.

Actual Behavior

demo.py:7: error: Incompatible default for argument "arg" (default has type "Optional[int]", argument has type "int")

Your Environment

  • Mypy version used: 0.961 (compiled: yes)
  • Mypy command-line flags: None
  • Mypy configuration options from mypy.ini (and other config files): N/A
  • Python version used: 3.10.1
  • Operating system and version: Ubuntu 20.04

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit der Reproduktion in demo.py und führe sie mit dem gemeldeten Mypy-Setup aus, um zu bestätigen, dass die Typ-Eingrenzung für das Default-Argument verloren geht. Verfolge die Behandlung eingegrenzter Ausdrücke, die in Funktions-Defaults verwendet werden, und füge einen Regressionstest hinzu, der zeigt, dass der durch die Assertion auf Optional[int] eingegrenzte Wert als int-Default akzeptiert wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.