TracebackException.format_exception_only() mutates attributes on keyword typo suggestion
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
Bug description
TracebackException.format_exception_only() is not idempotent when _find_keyword_typos() finds a suggestion. The method directly mutates self.text, self.offset, self.end_offset, self.lineno, self.end_lineno, and self.msg, so a second call produces different output (e.g. wrong line number).
import traceback
code = "fr x in range(10):\n pass\n"
try:
compile(code, "<test>", "exec")
except SyntaxError as exc:
te = traceback.TracebackException(type(exc), exc, None)
r1 = list(te.format_exception_only()) # correct
r2 = list(te.format_exception_only()) # different output
assert r1 == r2 # fails
_find_keyword_typos was added in gh-132449.
CPython versions tested on
main
Operating systems tested on
macOS
Linked PRs
- gh-154545
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 par traceback.TracebackException.format_exception_only() et par le point d’entrée _find_keyword_typos() décrit dans l’issue. Reproduisez l’exemple de SyntaxError fourni, appelez format_exception_only() deux fois et comparez les résultats. C’est terminé lorsque des appels répétés produisent une sortie identique, y compris le numéro de ligne et les autres détails de l’exception.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 35/100