Issue
if I'm building a function call using partial, is there any way to query the partial to see if all the arguments for that function have been supplied? For instance in the code below is there any function I can pass empty_partial
, partial_partial
, and full_partial
into, that will return True
only on full_partial
, indicating that all the arguments have been supplied?
from functools import partial
def foo(bar, baz):
return bar + baz
empty_partial = partial(foo)
partial_partial = partial(empty_partial, bar=3)
full_partial = partial(partial_partial, baz=5)
print(full_partial())
# 8
if I tried to call the empty partial I'll get a message like this:
empty_partial = partial(foo)
empty_partial()
TypeError: foo() missing 2 required positional arguments: 'bar' and 'baz'
Where do I go to get this error, that it's missing 2 required arguments if I did call it (without having to try to call it and parse the error)?
Solution
get the signature of the partial object, then check to make sure signature.bind
does not raise a TypeError
import inspect
def partial_satisfied(partial_fn):
signature = inspect.signature(partial_fn.func)
try:
signature.bind(*partial_fn.args, **partial_fn.keywords)
return True
except TypeError:
return False
should do the trick (requires a python new enough to support function signatures)
Answered By - Mark Harviston Answer Checked By - Clifford M. (PHPFixing Volunteer)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.