Mac OS X上的Boost.Python:“TypeError: 属性名必须是字符串”

7 投票
1 回答
841 浏览
提问于 2025-04-16 00:16

我最近通过MacPorts安装了Boost,打算在C++中嵌入一些Python代码。然后我决定检查一下Xcode的配置是否正确,找了一个Python官网上的示例:

#include <boost/python.hpp>

using namespace boost::python;

int main( int argc, char ** argv ) 
{
    try 
    {
        Py_Initialize();

        object main_module(handle<>(borrowed(PyImport_AddModule("__main__"))));

        object main_namespace = main_module.attr("__dict__");

        handle<> ignored(PyRun_String("print \"Hello, World\"",
                                      Py_file_input,
                                      main_namespace.ptr(),
                                      main_namespace.ptr()));
    } 
    catch( error_already_set ) 
    {
        PyErr_Print();
    }
}

这个示例可以正常编译,但当我运行它时,调用attr()时出现了一个异常,错误信息是"TypeError: attribute name must be string, not 'str'"。这听起来有点像是个占位符。

我在谷歌上查了一下,但没有找到解决办法。

我使用的是Boost v1.39、Python 2.5和GCC 4.0,运行在Leopard系统上。

1 个回答

1

你的代码在我这里可以正常运行,以下是我的配置:

  • 操作系统:Snow Leopard
  • 编译器版本:gcc 4.2.1(这是苹果公司构建的版本)
  • Boost库版本:1.41.0,安装在/usr/local/boost/1_41_0/目录下
  • 系统自带的Python版本:2.5

编译时使用的命令是:

g++ -I/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/ -I/usr/local/boost/1_41_0/include -L/usr/local/boost/1_41_0/lib/ -boost_python -L/usr/lib/python2.6/config -lpython2.6 test.cpp

撰写回答