我必须使用boost python库检查传递的对象类型在python中是否存在:

// bp = boost::python
bool TypeExists(const std::string &typeName)
{
    bp::object ret = bp::exec(
            (boost::format("'%1%' in globals()") % typeName).str().c_str()
    );
    return bp::extract<bool>(ret);
}


因此,在这段代码中,我运行了类似于'TypeName' in globals()的python表达式。这应该返回布尔类型的对象。但是提取总是返回0。类型100%存在是因为在TypeExists调用之后的下一行中,我创建了这种类型的对象。怎么了?

最佳答案

问题是exec执行Python代码并返回执行结果(无论是执行还是有错误)。并且您需要表达评估的结果。

您必须在此处使用eval以获得表达式评估结果。

bp::object ret = bp::eval(...)


documentation中对此进行了描述。

关于c++ - 存在Python类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11899544/

10-10 18:21
查看更多