问题boost::python::numpy:if";引发异常;boost::numpy::initialize";

问题boost::python::numpy:if";引发异常;boost::numpy::initialize";,python,numpy,exception,boost,Python,Numpy,Exception,Boost,如果我希望使用boost::numpy,我需要调用boost::python::numpy::initialize(),但是每当我提取boost::python::list的元素时,就会得到boost::python::throw\u error\u ready\u set异常 我写了一个小例子: #include <boost/python.hpp> #include <boost/python/numpy.hpp> #include <vector> t

如果我希望使用boost::numpy,我需要调用boost::python::numpy::initialize(),但是每当我提取boost::python::list的元素时,就会得到boost::python::throw\u error\u ready\u set异常

我写了一个小例子:

#include <boost/python.hpp>
#include <boost/python/numpy.hpp>
#include <vector>

template <class T>
boost::python::list stdvector2pylist(const std::vector<T> &stdvector) {
    boost::python::list pylist;
    for (auto i_T : stdvector ) {
        pylist.append(i_T);
    }
    return pylist;
}

template< typename T >
std::vector< T > pylist2stdvector( const boost::python::list& pyList) {
    auto stdVector = std::vector<T>(len(pyList));
    for (unsigned i_T = 0; i_T < len(pyList); ++i_T) {
        stdVector[i_T] = boost::python::extract<T>(pyList[i_T]);
    }
    return stdVector;
}

int main(int argc, char **argv) {

    Py_Initialize();
    boost::python::numpy::initialize();

    std::vector<std::string> words{"1", "2", "3"};
    boost::python::list piwords = stdvector2pylist(words);
    std::vector<std::string> reWords = pylist2stdvector<std::string>(piwords);
}
#包括
#包括
#包括
模板
boost::python::list stdvector2pylist(const std::vector&stdvector){
boost::python::list pylist;
用于(自动输入:stdvector){
pylist.append(i_T);
}
返回pylist;
}
模板
std::vectorpylist2stdvector(const boost::python::list&pyList){
自动stdVector=std::vector(len(pyList));
for(无符号i_T=0;i_T
如果我注释boost::python::numpy::initialize();它很好用。 如果列表是从Python脚本发送的,那么它可以工作


我正在链接boost 1.65和Python 3.6.1。

您真的安装了NumPy吗?是的,安装了NumPy。如果我从Python脚本调用一个公开的C++方法,它会起作用,但是如果我从“C++主”调用相同的方法,它会抛出一个异常。你真的安装了NUMPY吗?是的,NUMPY已经安装好了。如果我从Python脚本调用一个公开的C++方法,它会起作用,但是如果从“C++主”调用相同的方法,它会抛出异常。