https://github.com/python/cpython/commit/e5c7543f121ad970da46fab3e8e0b4f93e253aa2
commit: e5c7543f121ad970da46fab3e8e0b4f93e253aa2
branch: 3.12
author: Brian Schubert <[email protected]>
committer: iritkatriel <[email protected]>
date: 2024-10-30T00:54:32Z
summary:
[3.12] gh-126139: Improve error message location for future statement with
unknown feature (GH-126140) (#126160)
(cherry picked from commit 224c370a3680132997f1e43d20a3b4ca95a060ab)
files:
A
Misc/NEWS.d/next/Core_and_Builtins/2024-10-29-15-17-31.gh-issue-126139.B4OQ8a.rst
M Lib/test/test_exceptions.py
M Lib/test/test_future_stmt/test_future.py
M Python/future.c
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
index c5f4b892efb50f..72c86eecae2539 100644
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -316,8 +316,8 @@ def baz():
check('def f():\n global x\n nonlocal x', 2, 3)
# Errors thrown by future.c
- check('from __future__ import doesnt_exist', 1, 1)
- check('from __future__ import braces', 1, 1)
+ check('from __future__ import doesnt_exist', 1, 24)
+ check('from __future__ import braces', 1, 24)
check('x=1\nfrom __future__ import division', 2, 1)
check('foo(1=2)', 1, 5)
check('def f():\n x, y: int', 2, 3)
diff --git a/Lib/test/test_future_stmt/test_future.py
b/Lib/test/test_future_stmt/test_future.py
index 5a85e08e19b7b6..a06e0510f12dde 100644
--- a/Lib/test/test_future_stmt/test_future.py
+++ b/Lib/test/test_future_stmt/test_future.py
@@ -55,7 +55,7 @@ def test_future_multiple_features(self):
def test_badfuture3(self):
with self.assertRaises(SyntaxError) as cm:
from test.test_future_stmt import badsyntax_future3
- self.check_syntax_error(cm.exception, "badsyntax_future3", 3)
+ self.check_syntax_error(cm.exception, "badsyntax_future3", 3, 24)
def test_badfuture4(self):
with self.assertRaises(SyntaxError) as cm:
@@ -80,12 +80,12 @@ def test_badfuture7(self):
def test_badfuture8(self):
with self.assertRaises(SyntaxError) as cm:
from test.test_future_stmt import badsyntax_future8
- self.check_syntax_error(cm.exception, "badsyntax_future8", 3)
+ self.check_syntax_error(cm.exception, "badsyntax_future8", 3, 24)
def test_badfuture9(self):
with self.assertRaises(SyntaxError) as cm:
from test.test_future_stmt import badsyntax_future9
- self.check_syntax_error(cm.exception, "badsyntax_future9", 3)
+ self.check_syntax_error(cm.exception, "badsyntax_future9", 3, 39)
def test_badfuture10(self):
with self.assertRaises(SyntaxError) as cm:
diff --git
a/Misc/NEWS.d/next/Core_and_Builtins/2024-10-29-15-17-31.gh-issue-126139.B4OQ8a.rst
b/Misc/NEWS.d/next/Core_and_Builtins/2024-10-29-15-17-31.gh-issue-126139.B4OQ8a.rst
new file mode 100644
index 00000000000000..278971b46d18ab
--- /dev/null
+++
b/Misc/NEWS.d/next/Core_and_Builtins/2024-10-29-15-17-31.gh-issue-126139.B4OQ8a.rst
@@ -0,0 +1,2 @@
+Provide better error location when attempting to use a :term:`future
+statement <__future__>` with an unknown future feature.
diff --git a/Python/future.c b/Python/future.c
index d56f7330964684..998a7f740eac01 100644
--- a/Python/future.c
+++ b/Python/future.c
@@ -39,12 +39,20 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s,
PyObject *filename)
} else if (strcmp(feature, "braces") == 0) {
PyErr_SetString(PyExc_SyntaxError,
"not a chance");
- PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset + 1);
+ PyErr_RangedSyntaxLocationObject(filename,
+ name->lineno,
+ name->col_offset + 1,
+ name->end_lineno,
+ name->end_col_offset + 1);
return 0;
} else {
PyErr_Format(PyExc_SyntaxError,
UNDEFINED_FUTURE_FEATURE, feature);
- PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset + 1);
+ PyErr_RangedSyntaxLocationObject(filename,
+ name->lineno,
+ name->col_offset + 1,
+ name->end_lineno,
+ name->end_col_offset + 1);
return 0;
}
}
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]