的文档PyList_New
说在列表完全初始化之前这两个 API 是安全的:PyList_SetItem()
和PyList_SET_ITEM()
。但如果在初始化列表的过程中发生错误,我该怎么办?
PyObject* my_list = PyList_New(count);
if (!my_list) {
return PyErr_NoMemory();
}
for (int i = 0; i < count; i++) {
PyObject* element = _function_may_set_exc_and_return_null();
if (!element) {
// what to do here??
return NULL;
}
PyList_SET_ITEM(my_list, i, element);
}
return my_list;