Python类型存在

时间:2012-08-10 10:12:08

标签: c++ python boost-python

我必须使用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);
}

所以,在这段代码中我运行python表达式,它看起来像:'TypeName' in globals()。这应该返回具有布尔类型的对象。但是提取总是返回0.类型100%存在,因为在TypeExists调用后的下一行中我创建了这种类型的对象。怎么了?

1 个答案:

答案 0 :(得分:2)

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

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

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

documentation中描述了这一点。