def _process_arguments(self, args, keywords):
argdict = {}
nargs = min(len(args), len(self._argnames))
for iarg in range(nargs):
argdict[self._argnames[iarg]] = args[iarg]
if nargs < len(args):
if self._varargs is None:
msg = "macro '{0}' called with too many positional arguments "\
"(expected: {1}, received: {2})"\
.format(self._name, len(self._argnames), len(args))
raise FyppFatalError(msg, self._fname, self._spans[0])
else:
argdict[self._varargs] = tuple(args[nargs:])
elif self._varargs is not None:
argdict[self._varargs] = ()
for argname in self._argnames[:nargs]:
if argname in keywords:
msg = "got multiple values for argument '{0}'".format(argname)
raise FyppFatalError(msg, self._fname, self._spans[0])
if self._varargs is not None and self._varargs in keywords:
msg = "got unexpected keyword argument '{0}'".format(self._varargs)
raise FyppFatalError(msg, self._fname, self._spans[0])
argdict.update(keywords)
if nargs < len(self._argnames):
for argname in self._argnames[nargs:]:
if argname in argdict:
pass
elif argname in self._defaults:
argdict[argname] = self._defaults[argname]
else:
msg = "macro '{0}' called without mandatory positional "\
"argument '{1}'".format(self._name, argname)
raise FyppFatalError(msg, self._fname, self._spans[0])
return argdict
评论列表
文章目录