Skip to content

Python 3.14 REPL sometimes breaks when editing code blocks #135185

Closed as duplicate of#133541
@treyhunner

Description

@treyhunner

Bug report

Bug description:

This has happened to me three times now over the past few weeks and I have not yet been able to reliable reproduce the issue.

The most recent time, I had entered this function into the REPL (typing it all out manually):

>>> def upper_based_on_length(fruit):
...     if len(fruit) < 6:
...         return fruit
...     else:
...         return fruit.upper()
...

I hit the up arrow on my keyboard and I tried to delete the if line with Ctrl+K at the start of the if.

That then immediately showed this error:

>>> def upper_based_on_length(fruit):
...     Traceback (most recent call last):
  File "/home/trey/.pyenv/versions/3.14.0b1/lib/python3.14/_pyrepl/readline.py", line 393, in multiline_input
    return reader.readline()
           ~~~~~~~~~~~~~~~^^
  File "/home/trey/.pyenv/versions/3.14.0b1/lib/python3.14/_pyrepl/reader.py", line 748, in readline
    self.handle1()
    ~~~~~~~~~~~~^^
  File "/home/trey/.pyenv/versions/3.14.0b1/lib/python3.14/_pyrepl/reader.py", line 731, in handle1
    self.do_cmd(cmd)
    ~~~~~~~~~~~^^^^^
  File "/home/trey/.pyenv/versions/3.14.0b1/lib/python3.14/_pyrepl/reader.py", line 661, in do_cmd
    self.refresh()
    ~~~~~~~~~~~~^^
  File "/home/trey/.pyenv/versions/3.14.0b1/lib/python3.14/_pyrepl/reader.py", line 638, in refresh
    self.screen = self.calc_screen()
                  ~~~~~~~~~~~~~~~~^^
  File "/home/trey/.pyenv/versions/3.14.0b1/lib/python3.14/_pyrepl/completing_reader.py", line 261, in calc_screen
    screen = super().calc_screen()
  File "/home/trey/.pyenv/versions/3.14.0b1/lib/python3.14/_pyrepl/reader.py", line 315, in calc_screen
    colors = list(gen_colors(self.get_unicode()))
  File "/home/trey/.pyenv/versions/3.14.0b1/lib/python3.14/_pyrepl/utils.py", line 102, in gen_colors
    for color in gen_colors_from_token_stream(gen, line_lengths):
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/home/trey/.pyenv/versions/3.14.0b1/lib/python3.14/_pyrepl/utils.py", line 160, in gen_colors_from_token_stream
    for prev_token, token, next_token in token_window:
                                         ^^^^^^^^^^^^
  File "/home/trey/.pyenv/versions/3.14.0b1/lib/python3.14/_pyrepl/utils.py", line 357, in prev_next_window
    for x in iterator:
             ^^^^^^^^
  File "/home/trey/.pyenv/versions/3.14.0b1/lib/python3.14/tokenize.py", line 586, in _generate_tokens_from_c_tokenizer
    raise e from None
  File "/home/trey/.pyenv/versions/3.14.0b1/lib/python3.14/tokenize.py", line 582, in _generate_tokens_from_c_tokenizer
    for info in it:
                ^^
  File "<string>", line 4
    else:
         ^
IndentationError: unindent does not match any outer indentation level

Note that I did not try to run this block of code. I was simply editing it. The syntax simply became temporarily invalid while editing.

I have tried to reproduce this in the same REPL environment using a different function name and I can't seem to do so. If I edit the exact code block in history that produced the error, I see the same exception again. However, if I try to rewrite the same function with a different name and then attempt to edit it, I don't see the error again.

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Metadata

Metadata

Assignees

No one assigned

    Labels

    stdlibPython modules in the Lib dirtopic-replRelated to the interactive shelltype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions