UUID调用上的任意内置错误

时间:2014-08-05 11:34:08

标签: python python-c-api

对不起,这不是一个很好的问题[编辑,修订,总结和诊断]。

我有一个与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代码,所以我没想到会出现问题。

0 个答案:

没有答案