]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-122546: use same filename for different exceptions in new repl (#123217)
authorSergey B Kirpichev <skirpichev@gmail.com>
Thu, 22 Aug 2024 11:55:30 +0000 (14:55 +0300)
committerGitHub <noreply@github.com>
Thu, 22 Aug 2024 11:55:30 +0000 (12:55 +0100)
* gh-122546: use same filename for different exceptions in new repl

* +1

Lib/_pyrepl/console.py
Lib/code.py
Lib/test/test_pyrepl/test_pyrepl.py
Misc/NEWS.d/next/Library/2024-08-22-11-25-19.gh-issue-122546.BSmeE7.rst [new file with mode: 0644]

index 330ebbd618567997223668e8f525308435959df1..3e72a56807f6fb186ab574d82370b8a3bc051518 100644 (file)
@@ -162,7 +162,7 @@ class InteractiveColoredConsole(code.InteractiveConsole):
         self.can_colorize = _colorize.can_colorize()
 
     def showsyntaxerror(self, filename=None, **kwargs):
-        super().showsyntaxerror(**kwargs)
+        super().showsyntaxerror(filename=filename, **kwargs)
 
     def _excepthook(self, typ, value, tb):
         import traceback
index b1079824a75414a25c578c591ab369bbb3b65a8b..c559191d8a747bcbb7d6a9a1f0ee9ddf0efcf45f 100644 (file)
@@ -109,15 +109,7 @@ class InteractiveInterpreter:
         try:
             typ, value, tb = sys.exc_info()
             if filename and typ 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))
+                value.filename = filename
             source = kwargs.pop('source', "")
             self._showtraceback(typ, value, None, source)
         finally:
index e11ec74aa14058089cb7712a6b0429098d295bbb..779849759225e5bb726f63b00132cb1748103b12 100644 (file)
@@ -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("<python-input-0>", output)
+
     @force_not_colorized
     def test_proper_tracebacklimit(self):
         env = os.environ.copy()
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 (file)
index 0000000..55681ec
--- /dev/null
@@ -0,0 +1,2 @@
+Consistently use same file name for different exceptions in the new repl.
+Patch by Sergey B Kirpichev.