我想在我的C应用程序中嵌入python.我不使用Boost库.
如果C函数抛出异常,我想捕获它并在我的应用程序中打印错误或获取一些详细信息,如python脚本中的行号导致错误.
我该怎么做?我找不到任何函数来获取Python API或C中的详细异常信息.
void sum(int iA,int iB)
{
throw iA + iB;
}
from ctypes import *
mydll = WinDLL("C:\\Users\\cppwrapper.dll")
try:
mydll.sum(2,3)
catch:
print "exception occured"
但它不起作用.请帮我解决这个问题.提前致谢.
最佳答案
你需要做的是捕获C函数中的异常,然后将其转换为python异常并将其返回到python代码(有关详细信息,请参阅the manual).就像是:
PyObject method(...)
{
try {
res = do_stuff();
return res;
}
catch(SomeException e)
{
PyErr_SetObject(exception_type,message);
return NULL;
}
catch(...)
{
PyErr_SetObject(PyErr_SystemError,"Unexpected exception in C++");
return NULL;
}
}
如果在返回python之前没有捕获异常,异常可能会通过python解释器掉落,并且可能会退出调用python解释器的C函数.这可能是处理异常的一种坏方法,因为python解释器无法进行清理.省略号捕获只是为了确保不会发生这种情况.