Commit f3ef06a7 authored by Pablo Galindo's avatar Pablo Galindo Committed by GitHub

bpo-38478: Correctly handle keyword argument with same name as positional-only parameter (GH-16800)

parent eb1dda2b
......@@ -2960,7 +2960,7 @@ class Signature:
arguments[param.name] = tuple(values)
break
if param.name in kwargs:
if param.name in kwargs and param.kind != _POSITIONAL_ONLY:
raise TypeError(
'multiple values for argument {arg!r}'.format(
arg=param.name)) from None
......
......@@ -3573,6 +3573,16 @@ class TestSignatureBind(unittest.TestCase):
iterator = iter(range(5))
self.assertEqual(self.call(setcomp_func, iterator), {0, 1, 4, 9, 16})
def test_signature_bind_posonly_kwargs(self):
def foo(bar, /, **kwargs):
return bar, kwargs.get(bar)
sig = inspect.signature(foo)
result = sig.bind("pos-only", bar="keyword")
self.assertEqual(result.kwargs, {"bar": "keyword"})
self.assertIn(("bar", "pos-only"), result.arguments.items())
class TestBoundArguments(unittest.TestCase):
def test_signature_bound_arguments_unhashable(self):
......
Fixed a bug in :meth:`inspect.signature.bind` that was causing it to fail
when handling a keyword argument with same name as positional-only parameter.
Patch by Pablo Galindo.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment