我正在调用一个函数,它接受一个位置参数列表和关键字参数。我想要分别处理args和kwargs。不幸的是,与PyArg_ParseTuple对于位置参数不同,没有相应的PyArg_ParseKeywords可以用于关键字参数。我尝试通过在args的位置上传递Py_None(也可以是NULL)来防止解析位置参数:
static PyObject* test_func(PyObject* self, PyObject* args, PyObject *kwargs)
{
static const char *kwList[] = {"kw1", "kw2", NULL};
const char* kw1_val = NULL;
PyObject* kw2_val = NULL;
if (! PyArg_ParseTupleAndKeywords(Py_None,
kwargs,
"zO",
const_cast<char**>(kwList),
&kw1_val,
&kw2_val))
{
return NULL;
}
}
在这里使用Py_None(或NULL)会导致:
Python/getargs.c:1390: bad argument to internal function
如果我用args代替Py_None,我会得到以下错误:
TypeError: function takes at most 2 arguments (4 given)
上述 TypeError 错误是由于在解析方法中,我传递给 test_func 的 2 个位置参数和 2 个关键字参数被拆分开来,而只有 kw1_val 和 kw2_val 这两个变量可以接收这 4 个值。
有没有一种处理上述情况的方法?请注意,位置参数可以有任意数量的值。