Support more Python 3.15 exception changes (#241)
Build / lint (push) Canceled after 0s
Build / test (false, 3.10) (push) Canceled after 0s
Build / test (false, 3.11) (push) Canceled after 0s
Build / test (false, 3.12) (push) Canceled after 0s
Build / test (false, 3.13) (push) Canceled after 0s
Build / test (false, 3.8) (push) Canceled after 0s
Build / test (false, 3.9) (push) Canceled after 0s
Build / coverage (push) Canceled after 0s

Python 3.15 changed the wording of some SyntaxError exceptions to make
it clearer. The previous PR only fixed one instance.
This commit is contained in:
Steve Kowalik
2026-07-30 07:27:07 +00:00
committed by GitHub
parent 62b30e7fae
commit 512e78c1a8
3 changed files with 17 additions and 5 deletions
+4 -1
View File
@@ -659,7 +659,10 @@ class _StringChecks(SyntaxRule):
@ErrorFinder.register_rule(value='*')
class _StarCheck(SyntaxRule):
message = "named arguments must follow bare *"
if sys.version_info[:2] < (3, 15):
message = "named arguments must follow bare *"
else:
message = "named parameters must follow bare *"
def is_issue(self, leaf):
params = leaf.parent
+7 -2
View File
@@ -139,7 +139,6 @@ FAILING_EXAMPLES = [
'del *a, b',
'def x(*): pass',
'(%s *d) = x' % ('a,' * 256),
'{**{} for a in [1]}',
'(True,) = x',
'([False], a) = x',
'def x(): from math import *',
@@ -229,7 +228,6 @@ FAILING_EXAMPLES = [
'async def foo():\n yield x\n return 1',
'async def foo():\n yield x\n return 1',
'[*[] for a in [1]]',
'async def bla():\n def x(): await bla()',
'del None',
'del True',
@@ -423,3 +421,10 @@ if sys.version_info[:2] < (3, 13):
FAILING_EXAMPLES += [
'from .__future__ import whatever',
]
if sys.version_info[:2] < (3, 15):
# these nested expression successfully evaluate with 3.15
FAILING_EXAMPLES += [
'[*[] for a in [1]]',
'{**{} for a in [1]}',
]
+6 -2
View File
@@ -275,9 +275,13 @@ def test_named_argument_issues(works_not_in_py):
message = works_not_in_py.get_error_message('def foo(*, **dict): pass')
message = works_not_in_py.get_error_message('def foo(*): pass')
if works_not_in_py.version.startswith('2'):
assert message == 'SyntaxError: invalid syntax'
wanted = 'SyntaxError: invalid syntax'
else:
assert message == 'SyntaxError: named arguments must follow bare *'
if sys.version_info[:2] < (3, 15):
wanted = 'SyntaxError: named arguments must follow bare *'
else:
wanted = 'SyntaxError: named parameters must follow bare *'
assert message == wanted
works_not_in_py.assert_no_error_in_passing('def foo(*, name): pass')
works_not_in_py.assert_no_error_in_passing('def foo(bar, *, name=1): pass')