2012-08-10 43 views
0

我要检查是否使用升压Python库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呼叫下一行我创建这种类型的对象。怎么了?

回答

2

的问题是,EXEC执行Python代码,并返回执行结果(是否执行或有错误);你需要表达评估的结果。

您必须使用EVAL这里得到表达评价结果。

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

这在documentation中描述。

+0

也许你知道,'eval'它返回'global'不存在的错误。什么可能是错的? – Ockonal 2012-08-10 10:25:31

+0

好的,谢谢。我只需要作为第二个参数传递我的全局命名空间。 – Ockonal 2012-08-10 10:27:44