Message232152
The following doesn't work::
import inspect
def foo(*args, **kwargs):
return (args, kwargs)
# Code from https://docs.python.org/3/library/inspect.html#inspect.BoundArguments.arguments to fill in the defaults
sig = inspect.signature(foo)
ba = sig.bind()
for param in sig.parameters.values():
if param.name not in ba.arguments:
ba.arguments[param.name] = param.default
print(foo(*ba.args, **ba.kwargs))
instead it gives the following traceback::
Traceback (most recent call last):
File "sig_test.py", line 16, in <module>
print(foo(*ba.args, **ba.kwargs))
File "/Users/walter/.local/lib/python3.4/inspect.py", line 2246, in args
args.extend(arg)
TypeError: 'type' object is not iterable
In my use case there isn't a call to a function implemented in Python. Instead I'm implementing a templating languages that supports defining a signature for a template. Calling the template binds the arguments and inside the template the variables simply are a dictionary.
I.e. define the template like this:
t = Template("<?print a+b?>", signature="a, b=23")
Then you can call it like this:
t(17)
and inside the template the variables will be {"a": 17, "b": 23}.
The signature argument in the Template constructor will be parsed into an inspect.Signature object and I'd like to use Signature.bind() to get the final variables dictionary. |
|
Date |
User |
Action |
Args |
2014-12-04 20:43:18 | doerwalter | set | recipients:
+ doerwalter, r.david.murray |
2014-12-04 20:43:18 | doerwalter | set | messageid: <1417725798.9.0.977944328507.issue22998@psf.upfronthosting.co.za> |
2014-12-04 20:43:18 | doerwalter | link | issue22998 messages |
2014-12-04 20:43:18 | doerwalter | create | |
|