我使用boost 1.57和boost python。这是我的代码示例:

list records = call_method<list>(...);
object attr = records.attr("__len__")();
int n = extract<long>(attr);
for (int i = 0; i < n; ++i)
{
    records[i];
}//here cause error

在此列表中,我存储了一些元组,其中包含来自Python的字符串。似乎超出该范围的records[i]将调用Py_DECREF并导致错误,那么我应该怎么做才能从item中获取数据?

最佳答案

似乎某些operator []可能会导致这些现象,因此我必须避免这种情况并使用以下解决方案:

#include <boost/python/stl_iterator.hpp>

        list records = call_method<list>(...);
        stl_input_iterator<tuple> end;
        for (stl_input_iterator<tuple> itr(records); itr != end;++itr)
        {
            auto record = *itr;
            std::string tick = call_method<std::string>(record.ptr(), "__getitem__", 0);
            ...
        }

关于python - 当我使用operator []时,列表获取导致错误的项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38761141/

10-12 18:13