Closed
Description
Bug report
Bug description:
Running the code sample from #122071 in 3.13.0b4 or main exits the interpreter due to traceback.StackSummary._should_show_carets
raising an exception:
>>> exec(compile("tuple()[0]", "s", "exec"))
Traceback (most recent call last):
Exception ignored in the internal traceback machinery:
Traceback (most recent call last):
File "~\PycharmProjects\cpython\Lib\traceback.py", line 139, in _print_exception_bltin
return print_exception(exc, limit=BUILTIN_EXCEPTION_LIMIT, file=file, colorize=colorize)
File "~\PycharmProjects\cpython\Lib\traceback.py", line 130, in print_exception
te.print(file=file, chain=chain, colorize=colorize)
File "~\PycharmProjects\cpython\Lib\traceback.py", line 1448, in print
for line in self.format(chain=chain, colorize=colorize):
File "~\PycharmProjects\cpython\Lib\traceback.py", line 1384, in format
yield from _ctx.emit(exc.stack.format(colorize=colorize))
File "~\PycharmProjects\cpython\Lib\traceback.py", line 747, in format
formatted_frame = self.format_frame_summary(frame_summary, colorize=colorize)
File "~\PycharmProjects\cpython\Lib\traceback.py", line 583, in format_frame_summary
show_carets = self._should_show_carets(start_offset, end_offset, all_lines, anchors)
File "~\PycharmProjects\cpython\Lib\traceback.py", line 701, in _should_show_carets
statement = tree.body[0]
IndexError: list index out of range
Traceback (most recent call last):
File "~\PycharmProjects\cpython\Lib\code.py", line 91, in runcode
exec(code, self.locals)
File "<python-input-2>", line 1, in <module>
File "s", line 1, in <module>
IndexError: tuple index out of range
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "~\PycharmProjects\cpython\Lib\runpy.py", line 198, in _run_module_as_main
return _run_code(code, main_globals, None,
File "~\PycharmProjects\cpython\Lib\runpy.py", line 88, in _run_code
exec(code, run_globals)
File "~\PycharmProjects\cpython\Lib\_pyrepl\__main__.py", line 6, in <module>
__pyrepl_interactive_console()
File "~\PycharmProjects\cpython\Lib\_pyrepl\main.py", line 59, in interactive_console
run_multiline_interactive_console(console)
File "~\PycharmProjects\cpython\Lib\_pyrepl\simple_interact.py", line 156, in run_multiline_interactive_console
more = console.push(_strip_final_indent(statement), filename=input_name, _symbol="single") # type: ignore[call-arg]
File "~\PycharmProjects\cpython\Lib\code.py", line 303, in push
more = self.runsource(source, filename, symbol=_symbol)
File "~\PycharmProjects\cpython\Lib\_pyrepl\console.py", line 200, in runsource
self.runcode(code)
File "~\PycharmProjects\cpython\Lib\code.py", line 95, in runcode
self.showtraceback()
File "~\PycharmProjects\cpython\Lib\_pyrepl\console.py", line 168, in showtraceback
super().showtraceback(colorize=self.can_colorize)
File "~\PycharmProjects\cpython\Lib\code.py", line 147, in showtraceback
lines = traceback.format_exception(ei[0], ei[1], last_tb.tb_next, colorize=colorize)
File "~\PycharmProjects\cpython\Lib\traceback.py", line 155, in format_exception
return list(te.format(chain=chain, colorize=colorize))
File "~\PycharmProjects\cpython\Lib\traceback.py", line 1384, in format
yield from _ctx.emit(exc.stack.format(colorize=colorize))
File "~\PycharmProjects\cpython\Lib\traceback.py", line 747, in format
formatted_frame = self.format_frame_summary(frame_summary, colorize=colorize)
File "~\PycharmProjects\cpython\Lib\traceback.py", line 583, in format_frame_summary
show_carets = self._should_show_carets(start_offset, end_offset, all_lines, anchors)
File "~\PycharmProjects\cpython\Lib\traceback.py", line 701, in _should_show_carets
statement = tree.body[0]
IndexError: list index out of range
[Thread 31424.0x8ec0 exited with code 1]
[Thread 31424.0x15dc exited with code 1]
[Thread 31424.0x8b8c exited with code 1]
[Inferior 1 (process 31424) exited with code 01]
We can either protect the _should_show_carets
call with suppress(Exception)
here:
Lines 581 to 583 in 2762c6c
Or guard against tree.body
being empty here:
Lines 700 to 701 in 2762c6c
(or both?)
Should I submit a PR with one of the fixes above? Any preferences?
CPython versions tested on:
3.13, CPython main branch
Operating systems tested on:
Windows, Linux
Linked PRs
Metadata
Metadata
Assignees
Projects
Status
Done