From: Sergey B Kirpichev Date: Thu, 22 Aug 2024 23:28:09 +0000 (+0300) Subject: [3.13] gh-122546: use same filename for different exceptions in new repl (GH-123217... X-Git-Tag: v3.13.0rc2~115 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5271f8feadc198407449514348c34e3fe77de448;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-122546: use same filename for different exceptions in new repl (GH-123217) (#123226) --- diff --git a/Lib/_pyrepl/console.py b/Lib/_pyrepl/console.py index 43193432af2e..f04a1ba9fa47 100644 --- a/Lib/_pyrepl/console.py +++ b/Lib/_pyrepl/console.py @@ -162,7 +162,7 @@ class InteractiveColoredConsole(code.InteractiveConsole): self.can_colorize = _colorize.can_colorize() def showsyntaxerror(self, filename=None, **kwargs): - super().showsyntaxerror(colorize=self.can_colorize, **kwargs) + super().showsyntaxerror(filename=filename, **kwargs) def showtraceback(self): super().showtraceback(colorize=self.can_colorize) diff --git a/Lib/code.py b/Lib/code.py index aec7d61c1b89..ccf2d9d144ca 100644 --- a/Lib/code.py +++ b/Lib/code.py @@ -113,16 +113,7 @@ class InteractiveInterpreter: sys.last_value = value sys.last_traceback = tb if filename and type is SyntaxError: - # Work hard to stuff the correct filename in the exception - try: - msg, (dummy_filename, lineno, offset, line) = value.args - except ValueError: - # Not the format we expect; leave it alone - pass - else: - # Stuff in the right filename - value = SyntaxError(msg, (filename, lineno, offset, line)) - sys.last_exc = sys.last_value = value + value.filename = filename # Set the line of text that the exception refers to source = kwargs.pop('source', '') lines = source.splitlines() diff --git a/Lib/test/test_pyrepl/test_pyrepl.py b/Lib/test/test_pyrepl/test_pyrepl.py index d5eafc5eb58c..a433212fe92d 100644 --- a/Lib/test/test_pyrepl/test_pyrepl.py +++ b/Lib/test/test_pyrepl/test_pyrepl.py @@ -1100,6 +1100,16 @@ class TestMain(TestCase): self.assertIn("spam", output) self.assertNotEqual(pathlib.Path(hfile.name).stat().st_size, 0) + @force_not_colorized + def test_correct_filename_in_syntaxerrors(self): + env = os.environ.copy() + commands = "a b c\nexit()\n" + output, exit_code = self.run_repl(commands, env=env) + if "can't use pyrepl" in output: + self.skipTest("pyrepl not available") + self.assertIn("SyntaxError: invalid syntax", output) + self.assertIn("", output) + def run_repl( self, repl_input: str | list[str], diff --git a/Misc/NEWS.d/next/Library/2024-08-22-11-25-19.gh-issue-122546.BSmeE7.rst b/Misc/NEWS.d/next/Library/2024-08-22-11-25-19.gh-issue-122546.BSmeE7.rst new file mode 100644 index 000000000000..55681eced776 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-08-22-11-25-19.gh-issue-122546.BSmeE7.rst @@ -0,0 +1,2 @@ +Consistently use same file name for different exceptions in the new repl. +Patch by Sergey B Kirpichev.