I have a dict, which I need to pass key/values as keyword arguments.. For example..
d_args = {'kw1': 'value1', 'kw2': 'value2'} example(**d_args)
This works fine, but if there are values in the d_args dict that are not accepted by the example function, it obviously dies.. Say, if the example function is defined as def example(kw2):
This is a problem since I don’t control either the generation of the d_args, or the example function.. They both come from external modules, and example only accepts some of the keyword-arguments from the dict..
Ideally I would just do
parsed_kwargs = feedparser.parse(the_url) valid_kwargs = get_valid_kwargs(parsed_kwargs, valid_for = PyRSS2Gen.RSS2) PyRSS2Gen.RSS2(**valid_kwargs)
I will probably just filter the dict, from a list of valid keyword-arguments, but I was wondering: Is there a way to programatically list the keyword arguments the a specific function takes?
A little nicer than inspecting the code object directly and working out the variables is to use the inspect module.
If you want to know if its callable with a particular set of args, you need the args without a default already specified. These can be got by:
Then a function to tell what you are missing from your particular dict is:
Similarly, to check for invalid args, use:
And so a full test if it is callable is :
(This is good only as far as python’s arg parsing. Any runtime checks for invalid values in
kwargsobviously can’t be detected.)