概述
I have been working on a project where I want to remove the boost dependencies and replace it with the Python C API.
I spent some time understanding the Python C API and I saw this
catch (error_already_set const &)
I read the boost docs but it explains where it is used. But I want to know why it is needed and how can I achieve the same functionality using the native Python C api.
解决方案
Boost throws error_already_set when a Python error has occurred. So if you see code like this:
try {
bp::exec(bp::str("garbage code is garbage"));
} catch (const bp::error_already_set&) {
// your code here to examine Python traceback etc.
}
you'll replace it with:
your_ptr res = PyRun_String("garbage code is garbage");
if (!res) {
// your code here to examine Python traceback etc.
}
In other words, wherever you see catch(error_already_set), there you will likely want to do some error handling using whatever PyObject* or other value is involved to recognize when an error has occurred (and therefore you can examine the traceback, or convert it into a C++ exception).
最后
以上就是寒冷音响为你收集整理的boost python异常处理,Boost.python中的error_already_set做什么,以及如何在Python C API中类似地处理异常...的全部内容,希望文章能够帮你解决boost python异常处理,Boost.python中的error_already_set做什么,以及如何在Python C API中类似地处理异常...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复