mirror of
https://github.com/python/cpython.git
synced 2025-07-07 11:25:30 +00:00
gh-135646: Raise consistent NameError
exceptions in ForwardRef.evaluate()
(#135663)
This commit is contained in:
parent
9877d191f4
commit
343719d98e
3 changed files with 8 additions and 2 deletions
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Raise consistent :exc:`NameError` exceptions in :func:`annotationlib.ForwardRef.evaluate`
|
Loading…
Add table
Add a link
Reference in a new issue