python / python/cpython

TabError and IndentationError from line continuation

Offen
#144,018 5 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

interpreter-core topic-parser type-bug
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Bug report

Bug description:

The documentation states:

Indentation cannot be split over multiple physical lines using backslashes; the whitespace up to the first backslash determines the indentation.

When this rule applies to some, but not all, lines in a block, a TabError is sometimes unexpectedly raised:

L1 = 'if 1:\n'
L2 = '    1\n'
L3 = '    \\\n'
L4 = '        1\n'
exec(L1 + L2 + L3 + L4)
# works as expected

L1 = 'if 1:\n'
L2 = '\t1\n'
L3 = '\t\\\n'
L4 = '\t\t1\n'
exec(L1 + L2 + L3 + L4)
# TabError: inconsistent use of tabs and spaces in indentation

Also, when a line containing only a backslash is explicitly joined with an indented line, an IndentationError is unexpectedly raised:

exec('\\\n    1')
# IndentationError: unexpected indent
CPython versions tested on:

3.10, 3.11, 3.12, 3.13, 3.14

Operating systems tested on:

macOS

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

Führen Sie zunächst die beiden exec()-Reproduzierer auf den aufgeführten CPython-Versionen aus und verfolgen Sie anschließend die Verarbeitung von Einrückungen und Zeilenfortsetzungen nach, die an beiden Fällen beteiligt ist. Fügen Sie eine Regressionstestabdeckung für das gemeldete Verhalten von TabError und IndentationError hinzu und bestätigen Sie, dass die Tests die beabsichtigten Ergebnisse erfassen, ohne andere, nicht betroffene Einrückungsfehler zu ändern.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

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