我有一些使用 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) {
// ???
}
}
SO 这里有很多有用的答案,但它们似乎都适用于 Python 2,并且它们的解决方案不再起作用。我已经尝试了一些类似PyBytes_AsString
,的东西PyUnicode_AsUTF8
,但我得到的只是空指针。
我该如何从中提取有意义的东西pvalue
?对于初学者来说,引发异常的类型名称已经很有帮助了。如果有一个字符串传递给异常,那么获取它将是最有帮助的。