mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
[3.12] gh-130164: Fix inspect.Signature.bind() handling of positional-only args without defaults (GH-130192) (GH-132259)
Follow-up to9c15202
. (cherry picked from commitdab456dcef
) Co-authored-by: Jacob Walls <jacobtylerwalls@gmail.com>
This commit is contained in:
parent
aab69a8214
commit
40f81e1060
3 changed files with 12 additions and 2 deletions
|
@ -3161,6 +3161,9 @@ class Signature:
|
|||
break
|
||||
elif param.name in kwargs:
|
||||
if param.kind == _POSITIONAL_ONLY:
|
||||
if param.default is _empty:
|
||||
msg = f'missing a required positional-only argument: {param.name!r}'
|
||||
raise TypeError(msg)
|
||||
# Raise a TypeError once we are sure there is no
|
||||
# **kwargs param later.
|
||||
pos_only_param_in_kwargs.append(param)
|
||||
|
|
|
@ -4701,7 +4701,11 @@ class TestSignatureBind(unittest.TestCase):
|
|||
def call(func, *args, **kwargs):
|
||||
sig = inspect.signature(func)
|
||||
ba = sig.bind(*args, **kwargs)
|
||||
return func(*ba.args, **ba.kwargs)
|
||||
# Prevent unexpected success of assertRaises(TypeError, ...)
|
||||
try:
|
||||
return func(*ba.args, **ba.kwargs)
|
||||
except TypeError as e:
|
||||
raise AssertionError from e
|
||||
|
||||
def test_signature_bind_empty(self):
|
||||
def test():
|
||||
|
@ -4901,7 +4905,7 @@ class TestSignatureBind(unittest.TestCase):
|
|||
self.assertEqual(self.call(test, 1, 2, c_po=4),
|
||||
(1, 2, 3, 42, 50, {'c_po': 4}))
|
||||
|
||||
with self.assertRaisesRegex(TypeError, "missing 2 required positional arguments"):
|
||||
with self.assertRaisesRegex(TypeError, "missing a required positional-only argument: 'a_po'"):
|
||||
self.call(test, a_po=1, b_po=2)
|
||||
|
||||
def without_var_kwargs(c_po=3, d_po=4, /):
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
Fixed failure to raise :exc:`TypeError` in :meth:`inspect.Signature.bind`
|
||||
for positional-only arguments provided by keyword when a variadic keyword
|
||||
argument (e.g. ``**kwargs``) is present.
|
Loading…
Add table
Add a link
Reference in a new issue