On Sat, Apr 13, 2019 at 1:12 AM Viktor Roytman <viktor.royt...@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
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to