2012-08-10 74 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