
On Sat, Apr 13, 2019 at 1:12 AM Viktor Roytman <viktor.roytman@gmail.com> wrote:
Currently, unpacking a dict in order to pass its items as keyword arguments to a function will fail if there are keys present in the dict that are invalid keyword arguments:
>>> def func(*, a): ... pass ... >>> func(**{'a': 1, 'b': 2}) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: func() got an unexpected keyword argument 'b'
The standard approach I have encountered in this scenario is to pass in the keyword arguments explicitly like so
func( a=kwargs_dict["a"], b=kwargs_dict["b"], c=kwargs_dict["c"], )
But this grows more cumbersome as the number of keyword arguments grows.
There are a number of other workarounds, such as using a dict comprehension to select only the required keys, but I think it would be more convenient to have this be a feature of the language. I don't know what a nice syntax for this would be, or even how feasible it is.
I'm not 100% sure I understand your proposal, so I'm going to restate it; anywhere that I'm misrepresenting you, please clarify! Given this function and this dictionary: def func(*, a): pass args = {'a': 1, 'b': 2} you want to call the function, passing the recognized argument 'a' the value from the dict, but ignoring the superfluous 'b'. Are you able to alter the function? If so, just add kwargs to it: def func(*, a, **_): pass and then any unrecognized args will quietly land in the junk dictionary. ChrisA