Mac OS X 上的 Boost.Python:“类型错误:属性名称必须是字符串”
我最近使用 MacPorts 安装了 Boost,目的是在 C++ 中进行一些 Python 嵌入。然后我决定使用 Python 网站上找到的示例检查我是否正确配置了 Xcode:
#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:属性名称必须是字符串,而不是“str””。这听起来很像一个占位符。
我在谷歌上查了一下,但没有运气。
我在 Leopard 上使用 Boost v1.39、Python 2.5 和 GCC 4.0。
I recently installed Boost using MacPorts, with the intent to do some Python embedding in C++. I then decided to check if I configured Xcode correctly with an example found on Python's website:
#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();
}
}
It compiles correctly, but when I launch it, the call to attr() throws an exception, and the resulting error message is "TypeError: attribute name must be string, not 'str'". Which suspiciously sounds like a placeholder.
I looked it up on Google, but no luck.
I use Boost v1.39, Python 2.5 and GCC 4.0, on Leopard.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的代码使用以下配置对我有用:
编译使用:
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
Your code worked for me with the following configuration:
Compiled using:
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