`configparser.RawConfigParser` stub does not account for non-string options

Offen Anfängerfreundlich
#6,820 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
68/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
python
Bereich
tooling

Rechercherichtung

Beginne mit stdlib/configparser.pyi ungefähr bei Zeile 133 und vergleiche die RawConfigParser.set-Signatur mit dem im Issue gezeigten Verhalten. Führe das bereitgestellte Skript mit mypy aus, um die False Positives zu reproduzieren, und überprüfe anschließend, dass boolesche, ganzzahlige und bytes-Werte ohne Fehler akzeptiert werden, während das bestehende get-Verhalten weiterhin abgedeckt bleibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

stubs: false positive

The stub for configparser.RawConfigParser.set has its value argument typed as str | None (source) when it can accept lots of other types and is leading to a false positive in mypy for me.

Consider this valid script:

from configparser import RawConfigParser

cfg = RawConfigParser()
cfg.add_section("default")

cfg.set("default", "some_option1", True)
r1 = cfg.get("default", "some_option1")
print(r1, type(r1))


cfg.set("default", "some_option2", 1)
r2 = cfg.get("default", "some_option2")
print(r2, type(r2))

cfg.set("default", "some_option3", b"bytes")
r3 = cfg.get("default", "some_option3")
print(r3, type(r3))

It prints:

True <class 'bool'>
1 <class 'int'>
b'bytes' <class 'bytes'>

However, mypy flags this code for the reason described above:

test.py:6: error: Argument 3 to "set" of "RawConfigParser" has incompatible type "bool"; expected "Optional[str]"
test.py:11: error: Argument 3 to "set" of "RawConfigParser" has incompatible type "int"; expected "Optional[str]"
test.py:15: error: Argument 3 to "set" of "RawConfigParser" has incompatible type "bytes"; expected "Optional[str]"
Vorherrschende Sprache
Python
Sterne
5.1k
Forks
2.1k
Ø Merge
1 T. 13 Std.
Gemergte PRs (30 T.)
73

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus python/typeshed

Alle Issues in python/typeshed

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

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