我一直致力于一个项目,我想删除boost依赖项并将其替换为Python C API。
我花了一些时间来理解Python C API,我看到了这一点
catch (error_already_set const &)
我阅读了增强文档,但它解释了它的使用位置。但我想知道为什么需要它,如何使用原生Python C api实现相同的功能。
答案 0 :(得分:4)
Boost抛出error_already_set
。所以如果你看到这样的代码:
try {
bp::exec(bp::str("garbage code is garbage"));
} catch (const bp::error_already_set&) {
// your code here to examine Python traceback etc.
}
你将替换为:
your_ptr<PyObject> res = PyRun_String("garbage code is garbage");
if (!res) {
// your code here to examine Python traceback etc.
}
换句话说,无论您在哪里看到catch(error_already_set)
,您都可能希望使用PyObject*
或其他值来进行错误处理以识别错误发生的时间(因此您可以检查回溯,或将其转换为C ++异常。)