def f(a, b, c=True):
    print(a, b, c)

f('foo')     #=> TypeError: f() missing 1 required positional argument: 'b'
f('bar', 16) #=> `bar 16 True' *side effects*

import inspect

# new in version 3.3
inspect.signature(f).bind('foo')     #=> TypeError: 'b' parameter lacking default value
inspect.signature(f).bind('bar', 16) #=> <BoundArguments object> *pure*

# new in version 2.7, 3.2
inspect.getcallargs(f, 'foo')     #=> TypeError: f() missing 1 required positional argument: 'b'
inspect.getcallargs(f, 'bar', 16) #=> {'b': 16, 'c': True, 'a': 'bar'} *pure*