对不起,这不是一个很好的问题[编辑,修订,总结和诊断]。
我有一个与UUID一起使用的Python C-API。我将省略错误检查,但它适用于所有Python和内部函数。 [编辑:好的,抱歉,我的不好......见底部诊断]
// Get the raw data through get_bytes method
bytes_uuid = PyObject_CallMethod(pyuuid, "get_bytes", NULL);
uuid.setBytes(PyString_AsString(bytes_uuid));
Py_DECREF(bytes_uuid);
这通常按预期工作。要创建UUID,我使用:
// Call constructor
PyObject *UUIDkwargs = Py_BuildValue ("{s:s#}", "bytes", uuid.getBytes(), 16);
PyObject *emptyArgs = PyTuple_New(0);
ret = PyObject_Call(uuidClass, emptyArgs, UUIDkwargs);
Py_DECREF(UUIDkwargs);
Py_DECREF(emptyArgs);
return ret;
(为了便于阅读,省略了很多东西)。
它适用于大多数函数但不适用于某个函数,并且在UUID模块本身的chr()调用中失败。
DIAGNOSE:我执行了对PyObject_IsInstance的调用,并检查了0但不是-1。错误在那里,但没有捕获,第一次内置调用失败。好吧,不是第一次打电话。带有非常量参数的chr()调用。
因为中间有很多C代码,所以我没想到会出现问题。