Skip to content

Commit cebb78e

Browse files
committed
PR feedback
1 parent 4b1214e commit cebb78e

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

Lib/annotationlib.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import builtins
55
import enum
66
import functools
7+
import keyword
78
import sys
89
import types
910

@@ -156,10 +157,10 @@ def evaluate(self, *, globals=None, locals=None, type_params=None, owner=None):
156157
locals.pop(param_name, None)
157158

158159
arg = self.__forward_arg__
159-
if arg.isidentifier():
160+
if arg.isidentifier() and not keyword.iskeyword(arg):
160161
if arg in locals:
161162
value = locals[arg]
162-
elif globals is not None and arg in globals:
163+
elif arg in globals:
163164
value = globals[arg]
164165
elif hasattr(builtins, arg):
165166
return getattr(builtins, arg)

Lib/test/test_annotationlib.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,14 @@ def test_name_lookup_without_eval(self):
332332
with self.assertRaises(NameError):
333333
ForwardRef("doesntexist").evaluate()
334334

335+
def test_fwdref_invalid_syntax(self):
336+
fr = ForwardRef("if")
337+
with self.assertRaises(SyntaxError):
338+
fr.evaluate()
339+
fr = ForwardRef("1+")
340+
with self.assertRaises(SyntaxError):
341+
fr.evaluate()
342+
335343

336344
class TestGetAnnotations(unittest.TestCase):
337345
def test_builtin_type(self):

0 commit comments

Comments
 (0)