我必须使用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/