]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-132435: Test syntax warnings in a finally block (GH-132436) (GH-132503)
authorTomas R. <tomas.roun8@gmail.com>
Mon, 14 Apr 2025 07:21:36 +0000 (09:21 +0200)
committerGitHub <noreply@github.com>
Mon, 14 Apr 2025 07:21:36 +0000 (10:21 +0300)
(cherry picked from commit 887eabc5a74316708460120d60d0fa4f8bdf5960)

Lib/test/test_compile.py
Misc/NEWS.d/next/Core and Builtins/2025-04-13-10-34-27.gh-issue-131927.otp80n.rst [new file with mode: 0644]

index b57adfadb5af5f945ec2bf45b23de1624c8d8e37..e4be26322930e09e1630b9c3ccac0a3e9c8c314b 100644 (file)
@@ -1530,6 +1530,26 @@ class TestSpecifics(unittest.TestCase):
 
         self.assertEqual(len(caught), 2)
 
+    def test_compile_warning_in_finally(self):
+        # Ensure that warnings inside finally blocks are
+        # only emitted once despite the block being
+        # compiled twice (for normal execution and for
+        # exception handling).
+        source = textwrap.dedent("""
+            try:
+                pass
+            finally:
+                1 is 1
+        """)
+
+        with warnings.catch_warnings(record=True) as caught:
+            warnings.simplefilter("default")
+            compile(source, '<stdin>', 'exec')
+
+        self.assertEqual(len(caught), 1)
+        self.assertEqual(caught[0].category, SyntaxWarning)
+        self.assertIn("\"is\" with 'int' literal", str(caught[0].message))
+
 @requires_debug_ranges()
 class TestSourcePositions(unittest.TestCase):
     # Ensure that compiled code snippets have correct line and column numbers
diff --git a/Misc/NEWS.d/next/Core and Builtins/2025-04-13-10-34-27.gh-issue-131927.otp80n.rst b/Misc/NEWS.d/next/Core and Builtins/2025-04-13-10-34-27.gh-issue-131927.otp80n.rst
new file mode 100644 (file)
index 0000000..9aa940a
--- /dev/null
@@ -0,0 +1,3 @@
+Compiler warnings originating from the same module and line number are now
+only emitted once, matching the behaviour of warnings emitted from user
+code. This can also be configured with :mod:`warnings` filters.