【发布时间】:2018-03-23 14:21:47
【问题描述】:
我有一些使用 Boost.Python 运行 Python 3 代码的 C++ 代码。如果 Python 中发生任何异常,则会捕获该异常并抛出 C++ 异常。我想将一些最小的错误信息传递给 C++ 异常。
我目前拥有的是这样的:
try {
// execute python code via Boost.Python
} catch(boost::python::error_already_set&) {
PyObject *ptype, *pvalue, *ptraceback;
PyErr_Fetch(&ptype, &pvalue, &ptraceback);
if(pvalue) {
// ???
}
}
这里有很多有用的答案,但它们似乎都适用于 Python 2,并且它们的解决方案不再适用。我尝试了一些类似PyBytes_AsString、PyUnicode_AsUTF8 的方法,但我得到的只是空指针。
如何从pvalue 中提取有意义的内容?对于初学者来说,引发异常的类型名称已经很有帮助了。如果有一个字符串传递给异常,那么获取它将是最有帮助的。
【问题讨论】:
标签: string python-3.x c-api