异常情况下python内存管理的正确方法是什么?

时间:2014-07-03 19:15:35

标签: python python-c-api

我正在编写自己的Python模块,需要一些建议。让我们考虑一个模块中的示例函数:

PyObject* my_func(PyObject *self, PyObject* args)
{
    PyObject* returnObj;
    try
    {
       returnObj = my_create_output();
    }
    catch(const std::exception& ex)
    {
        PyErr_SetString(PyExc_Exception, ex.what());
        returnObj = NULL;
    }
    return returnObj;
}

my_create_output函数可以引发不同的异常(也是我自己的异常)。 returnObj是一个很大的结构(例如,列表),当{1}}函数已经创建了一半输出时,my_create_output函数可能会引发异常。对于这种情况,我应该如何删除catch块中的已分配对象?

1 个答案:

答案 0 :(得分:2)

my_create_output应该处理在异常情况下它创建的所有内容的释放,因为捕获异常的调用者无法访问任何异常。