From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Wed, 18 Jun 2025 13:26:58 +0000 (+0200) Subject: [3.14] gh-135646: Raise consistent `NameError` exceptions in `ForwardRef.evaluate... X-Git-Tag: v3.14.0b4~148 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d4daf4da7ec9c4ff93d713c511d6e96d8c9fe9fa;p=thirdparty%2FPython%2Fcpython.git [3.14] gh-135646: Raise consistent `NameError` exceptions in `ForwardRef.evaluate()` (GH-135663) (#135673) gh-135646: Raise consistent `NameError` exceptions in `ForwardRef.evaluate()` (GH-135663) (cherry picked from commit 343719d98e60d28d6102002f8ad3fd9dc5a58bd1) Co-authored-by: Victorien <65306057+Viicos@users.noreply.github.com> --- diff --git a/Lib/annotationlib.py b/Lib/annotationlib.py index 731817a99737..c83a1573ccd3 100644 --- a/Lib/annotationlib.py +++ b/Lib/annotationlib.py @@ -27,6 +27,9 @@ class Format(enum.IntEnum): _sentinel = object() +# Following `NAME_ERROR_MSG` in `ceval_macros.h`: +_NAME_ERROR_MSG = "name '{name:.200}' is not defined" + # Slots shared by ForwardRef and _Stringifier. The __forward__ names must be # preserved for compatibility with the old typing.ForwardRef class. The remaining @@ -184,7 +187,7 @@ class ForwardRef: elif is_forwardref_format: return self else: - raise NameError(arg) + raise NameError(_NAME_ERROR_MSG.format(name=arg), name=arg) else: code = self.__forward_code__ try: diff --git a/Lib/test/test_annotationlib.py b/Lib/test/test_annotationlib.py index fe091e52a86d..ae0e73f08c5b 100644 --- a/Lib/test/test_annotationlib.py +++ b/Lib/test/test_annotationlib.py @@ -1650,9 +1650,11 @@ class TestForwardRefClass(unittest.TestCase): with support.swap_attr(builtins, "int", dict): self.assertIs(ForwardRef("int").evaluate(), dict) - with self.assertRaises(NameError): + with self.assertRaises(NameError, msg="name 'doesntexist' is not defined") as exc: ForwardRef("doesntexist").evaluate() + self.assertEqual(exc.exception.name, "doesntexist") + def test_fwdref_invalid_syntax(self): fr = ForwardRef("if") with self.assertRaises(SyntaxError): diff --git a/Misc/NEWS.d/next/Library/2025-06-18-11-43-17.gh-issue-135646.r7ekEn.rst b/Misc/NEWS.d/next/Library/2025-06-18-11-43-17.gh-issue-135646.r7ekEn.rst new file mode 100644 index 000000000000..5fbd751467dd --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-06-18-11-43-17.gh-issue-135646.r7ekEn.rst @@ -0,0 +1 @@ +Raise consistent :exc:`NameError` exceptions in :func:`annotationlib.ForwardRef.evaluate`