Nicolas Le Manchet

Checking that arguments are compatible with a function without running it

Python allows to check that a set of arguments is compatible with a function without having to actually run the function:

>>> from inspect import signature
>>>
>>> def my_function(a, b, foo=None):
...     pass
...
>>> signature(my_function).bind(1, 2, foo='bar')
<BoundArguments (a=1, b=2, foo='bar')>  # No exception

>>> signature(my_function).bind(1, foo='bar')
TypeError: missing a required argument: 'b'

This is very useful for distributed task queues because often the machine that schedules the background job is not the same that executes it. I use it in Spinach to prevent scheduling of jobs which are sure to fail because workers would not be able to execute them.