Skip to content

Commit

Permalink
gh-116325: Raise SyntaxError rather than IndexError on ForwardRef…
Browse files Browse the repository at this point in the history
… with empty string arg (#116341)
  • Loading branch information
sobolevn authored Mar 5, 2024
1 parent ffcc450 commit a29998a
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 1 deletion.
6 changes: 6 additions & 0 deletions Lib/test/test_typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -5867,6 +5867,12 @@ def foo(a: 'Node[T'):
with self.assertRaises(SyntaxError):
get_type_hints(foo)

def test_syntax_error_empty_string(self):
for form in [typing.List, typing.Set, typing.Type, typing.Deque]:
with self.subTest(form=form):
with self.assertRaises(SyntaxError):
form['']

def test_name_error(self):

def foo(a: 'Noode[T]'):
Expand Down
2 changes: 1 addition & 1 deletion Lib/typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -880,7 +880,7 @@ def __init__(self, arg, is_argument=True, module=None, *, is_class=False):
# If we do `def f(*args: *Ts)`, then we'll have `arg = '*Ts'`.
# Unfortunately, this isn't a valid expression on its own, so we
# do the unpacking manually.
if arg[0] == '*':
if arg.startswith('*'):
arg_to_compile = f'({arg},)[0]' # E.g. (*Ts,)[0] or (*tuple[int, int],)[0]
else:
arg_to_compile = arg
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
:mod:`typing`: raise :exc:`SyntaxError` instead of :exc:`AttributeError`
on forward references as empty strings.

0 comments on commit a29998a

Please sign in to comment.