如何在python中捕获异常(在C++中引起)

5 c++ python ctypes

我想在我的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"
Run Code Online (Sandbox Code Playgroud)

但它不起作用.请帮我解决这个问题.提前致谢.

sky*_*ing 5

您需要做的是在 C++ 函数中捕获异常,然后将其转换为 python 异常并将其返回给 python 代码(有关详细信息,请参阅手册)。就像是:

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;
     }
}
Run Code Online (Sandbox Code Playgroud)

如果在返回 python 之前没有捕获异常,异常可能会通过 python 解释器,并可能退出调用 python 解释器的 C++ 函数。这可能是处理异常的一种糟糕方式,因为 python 解释器将无法进行清理。省略号捕获只是为了确保这不会发生。