]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] gh-116034: fix location info on the error of a failed assertion (#116052)
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>
Wed, 28 Feb 2024 19:12:16 +0000 (19:12 +0000)
committerGitHub <noreply@github.com>
Wed, 28 Feb 2024 19:12:16 +0000 (19:12 +0000)
Lib/test/test_traceback.py
Misc/NEWS.d/next/Core and Builtins/2024-02-28-17-25-19.gh-issue-116034.-Uu9tf.rst [new file with mode: 0644]
Python/compile.c

index a857d61e9b4a5f858007290451b5abad0de79980..16971a555af1a456fe801b20676bda52c499856a 100644 (file)
@@ -636,6 +636,23 @@ class TracebackErrorLocationCaretTests(unittest.TestCase):
         result_lines = self.get_exception(f_with_binary_operator)
         self.assertEqual(result_lines, expected_error.splitlines())
 
+    def test_caret_for_failed_assertion(self):
+        def f_assert():
+            test = 3
+            assert test == 1 and test == 2, "Bug found?"
+
+        lineno_f = f_assert.__code__.co_firstlineno
+        expected_error = (
+            'Traceback (most recent call last):\n'
+            f'  File "{__file__}", line {self.callable_line}, in get_exception\n'
+            '    callable()\n'
+            f'  File "{__file__}", line {lineno_f+2}, in f_assert\n'
+            '    assert test == 1 and test == 2, "Bug found?"\n'
+            '           ^^^^^^^^^^^^^^^^^^^^^^^\n'
+        )
+        result_lines = self.get_exception(f_assert)
+        self.assertEqual(result_lines, expected_error.splitlines())
+
     def test_traceback_specialization_with_syntax_error(self):
         bytecode = compile("1 / 0 / 1 / 2\n", TESTFN, "exec")
 
diff --git a/Misc/NEWS.d/next/Core and Builtins/2024-02-28-17-25-19.gh-issue-116034.-Uu9tf.rst b/Misc/NEWS.d/next/Core and Builtins/2024-02-28-17-25-19.gh-issue-116034.-Uu9tf.rst
new file mode 100644 (file)
index 0000000..c711b63
--- /dev/null
@@ -0,0 +1 @@
+Fix location of the error on a failed assertion.
index 558df3fca653ea8ee957d7f0eae8d78000dc83ef..16bc0ed013c9f17b30d5faa2ac54eddd17ebeb02 100644 (file)
@@ -4050,6 +4050,7 @@ compiler_assert(struct compiler *c, stmt_ty s)
         ADDOP_I(c, PRECALL, 0);
         ADDOP_I(c, CALL, 0);
     }
+    SET_LOC(c, s->v.Assert.test);
     ADDOP_I(c, RAISE_VARARGS, 1);
     compiler_use_next_block(c, end);
     return 1;