Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

collections.UserString.startswith() and endswith() reject UserString arguments

Offen Anfängerfreundlich
#159,868 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

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
78/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
python
Bereich
backend

Rechercherichtung

Lies Lib/collections/__init__.py und die bestehenden UserString-Methoden, die .data auspacken, und sieh dir dann die zugehörige Änderung in issue #140911 und PR #140945 an. Füge gezielte Tests für startswith() und endswith() mit UserString-Argumenten hinzu, einschließlich des gemeldeten Reproduktionsfalls; fertig ist die Arbeit, wenn beide True zurückgeben und das Verhalten gewöhnlicher str unverändert bleibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

stdlib type-bug
Bug report
Bug description

collections.UserString.startswith() and endswith() raise TypeError when their prefix or suffix is another UserString.

This is inconsistent with UserString.removeprefix(), removesuffix(), find(), and index(), which accept UserString arguments.

Reproducer
from collections import UserString

text = UserString("hello world")

print(text.removeprefix(UserString("hello")))
print(text.removesuffix(UserString("world")))

for method, argument in (
    ("startswith", UserString("hello")),
    ("endswith", UserString("world")),
):
    try:
        print(method, getattr(text, method)(argument))
    except TypeError as exc:
        print(method, type(exc).__name__, exc)
Actual output
 world
hello 
startswith TypeError startswith first arg must be str or a tuple of str, not UserString
endswith TypeError endswith first arg must be str or a tuple of str, not UserString
Expected behavior

Both prefix/suffix checks return True, consistently with the related UserString methods accepting UserString arguments.

Implementation details

In Lib/collections/__init__.py, UserString.startswith() and endswith() delegate directly to the underlying str without unwrapping the argument’s .data. Related methods explicitly unwrap UserString arguments.

Issue #140911 and PR #140945 fixed a similar inconsistency in UserString.index() and rindex().

This report concerns accepting UserString arguments in UserString methods, not changing str.startswith() or str.endswith() or introducing arbitrary string coercion.

CPython versions tested on:

3.14

Operating systems tested on:

macOS

Linked PRs
  • gh-159869
Vorherrschende Sprache
Python
Sterne
77.6k
Forks
38.4k
Ø Merge
1 T. 1 Std.
Gemergte PRs (30 T.)
589

Entwicklungsumgebung

In Codespaces öffnen

Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.

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/cpython

Alle Issues in python/cpython

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

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