python / python/cpython

TracebackException.format_exception_only() mutates attributes on keyword typo suggestion

Offen
#154,544 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

stdlib type-bug
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne bei traceback.TracebackException.format_exception_only() und dem im Issue beschriebenen Einstiegspunkt _find_keyword_typos(). Reproduziere das bereitgestellte SyntaxError-Beispiel, rufe format_exception_only() zweimal auf und vergleiche die Ergebnisse. Erledigt ist die Aufgabe, wenn wiederholte Aufrufe eine identische Ausgabe erzeugen, einschließlich der Zeilennummer und anderer Ausnahmeinformationen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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