gh-116325: Raise `SyntaxError` rather than `IndexError` on ForwardRef with empty string arg (#116341)

This commit is contained in:
Nikita Sobolev 2024-03-05 12:14:18 +03:00 committed by GitHub
parent ffcc450a9b
commit a29998a06b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 9 additions and 1 deletions

View File

@ -5867,6 +5867,12 @@ class ForwardRefTests(BaseTestCase):
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]'):

View File

@ -880,7 +880,7 @@ class ForwardRef(_Final, _root=True):
# 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

View File

@ -0,0 +1,2 @@
:mod:`typing`: raise :exc:`SyntaxError` instead of :exc:`AttributeError`
on forward references as empty strings.