Properties `.start`, `.stop`, `. step` of (generic) `slice[...]` should be optional (`| None`)
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 55/100
Rechercherichtung
Beginne beim generischen slice-Stub von typeshed und überprüfe die in #13008 besprochenen new-Annotationen zusammen mit der Alternative in #13007. Vergleiche die slice(42)-Beispiele des Issues mit den Typen von .start, .stop und .step; fertig ist die Aufgabe, wenn die Annotationen None bewahren und das gezeigte Type-Checking-Verhalten korrekt ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Situation
#13008 made slice.__new__ more precise. Generic slice[T] accepts T | None as arguments when creating a slice.
However, properties .start, .stop, . step of (generic) slice[...] are typed as there respective types, i.e. T in above example.
Consequence
This leads to typecheckers accepting:
def test(s: slice[int]) -> None:
assert_type(s.start, int)
if s.start is None:
assert_never(s.start)
whereas below obviously breaks:
test(slice(42))
Solution
Therefore, I suggest properties .start, .stop, . step should have optional (| None) return types:
@property
def start(self) -> _StartT_co | None: ...
@property
def step(self) -> _StepT_co | None: ...
@property
def stop(self) -> _StopT_co | None: ...
Alternative
Currently, typeshed uses slice[...] as slice[T | None] explicitly as per #13007, e.g.
class str:
def __getitem__(self, key: SupportsIndex | slice[SupportsIndex | None], /) -> str: ...
While that works/typechecks correctly:
def test(s: slice[int | None]) -> None:
assert_type(s.start, int | None)
if s.start is None or isinstance(s.start, int):
pass
else:
assert_never(s.start)
test(slice(42)) # okay
test(slice('x')) # error: Argument 1 to "slice" has incompatible type "str"; expected "int | None" [arg-type]
I see as downsides:
- it's error-prone / less ergonomic
- it renders part of #13008
__new__overloading complexity superfluous - it made #13007 more complex
Question
@Sachaa-Thanasius: Was the proposed solution considered for #13007?
- Vorherrschende Sprache
- Python
- Sterne
- 5.1k
- Forks
- 2.1k
- Ø Merge
- 2 T. 7 Min.
- Gemergte PRs (30 T.)
- 116
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus python/typeshed
-
`networkx.set_edge_attributes` should support scalar value + nameEvtl. vergeben @Fire162 hat das vor 9 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 67/100
Maintainer antworten meist innerhalb von 1 Tag
-
false alarm on decode callEvtl. vergeben @jw9829 hat das vor 36 Tagen übernommen. Offenhelp wanted stubs: false positive
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
python/typeshed#16441 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Don't run pyright basic checks on projects with strict pyright settings in CIEvtl. vergeben @Mohith1612 hat das vor 73 Tagen übernommen. Offenproject: infrastructure
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
python/typeshed#16005 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
stubs: improvement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
python/typeshed#15548 · 5 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
stubs: improvement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
python/typeshed#15529 · 5 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in python/typeshed
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
pytest-dev/pyfakefs#1367 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
IFEvalG exclude_word_harder misses the keyword next to punctuation, at the start or end of the text, and in other letter caseEvtl. vergeben @damienen hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
allenai/open-instruct#2151 ·
Maintainer antworten meist innerhalb von 1 Tag
-
feat(plan): support convertorLabels and convertorAffinity in Plan resourceEvtl. vergeben @AmenB hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
RedHatQE/openshift-python-wrapper#2849 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
Maintainer antworten meist innerhalb von 25 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
libnativeapi/nativeapi#21 ·