collections.UserString.startswith() and endswith() reject UserString arguments
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 78/100
Piste de recherche
Lis Lib/collections/__init__.py et les méthodes existantes de UserString qui extraient .data, puis examine le changement associé dans issue #140911 et PR #140945. Ajoute des tests ciblés pour startswith() et endswith() avec des arguments UserString, y compris le cas de reproduction signalé ; le travail est terminé lorsque les deux renvoient True et que le comportement de str ordinaire reste inchangé.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
- Langage dominant
- Python
- Étoiles
- 77.6k
- Forks
- 38.4k
- Merge moyen
- 1 j 1 h
- PR mergées (30 j)
- 589
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de python/cpython
-
Remove unused FVS_* macrosOuverteinterpreter-core type-feature
Difficulté 1/5 Moins d'une heure Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
extension-modules type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
python/cpython#160001 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
stdlib topic-XML type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
-
Docs: problem with page "msvcrt — Useful routines from the MS VC runtime"Peut-être à nouveau libre @jikekei l’a pris il y a 11 jours, et aucune pull request n’est ouverte. Ouvertedocs
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
python/cpython#159072 · 6 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Document unpacking in generator expressions (PEP 798)Peut-être pris @Marwan-verse l’a pris il y a 9 jours. Ouvertedocs
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
python/cpython#159061 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de python/cpython
Issues similaires
-
bug good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
yunaremaia/proto-drift#22 ·
-
bug good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
yunaremaia/memwatch#96 ·
-
bug good first issue
Difficulté 1/5 Moins d'une heure Accessibilité débutants 91/100
yunaremaia/ci-gate-watch#34 ·
-
bug good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
yunaremaia/agent-capability-attestation#64 ·
Les mainteneurs répondent en général sous 1 jour
-
bug good first issue
Difficulté 1/5 Moins d'une heure Accessibilité débutants 86/100
yunaremaia/agent-call-graph#43 ·
Les mainteneurs répondent en général sous 1 jour