Remove duplicate code by making `traceback.print_list()` delegate to `format_list()`
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
In Lib/traceback.py, the public helpers print_list() and format_list() independently contain the same formatting expression, so their outputs agree only by duplication. We propose routing print_list() through format_list() so that they share a single formatting path, with no change in behavior.
Problem
format_list() returns the formatted lines:
def format_list(extracted_list):
return StackSummary.from_list(extracted_list).format()
print_list() writes those same lines, but re-derives them with the identical expression instead of reusing format_list():
def print_list(extracted_list, file=None):
if file is None:
file = sys.stderr
for item in StackSummary.from_list(extracted_list).format():
print(item, file=file, end="")
The outputs match only because StackSummary.from_list(extracted_list).format() is duplicated in both. Any future change to how a frame list is formatted has to be applied in both places to prevent the two public helpers from silently diverging.
Solution
Have print_list() iterate format_list():
def print_list(extracted_list, file=None):
if file is None:
file = sys.stderr
for item in format_list(extracted_list):
print(item, file=file, end="")
This eliminates the possibility of drift and mirrors the delegation already used in this module; for example, print_tb() calls print_list() rather than re-deriving extract_tb(...).format().
Linked PRs
- gh-153783
Guide de contribution
Ouvrir 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.
Piste de recherche
Commencez dans Lib/traceback.py en comparant les points d’entrée print_list() et format_list() ainsi que leurs chemins actuels de formatage. C’est terminé lorsque print_list() délègue à format_list() sans modifier la sortie ni la gestion des fichiers ; l’issue contient un lien vers le PR gh-153783, vérifiez donc ce travail avant de poursuivre.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- devtools
- Type d'issue
- Refactorisation
- Difficulté
- 1/5
- Temps estimé
- Moins d'une heure
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 25/100