[英]How to catch exception (caused in C++) in python
我想在我的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代碼(有關詳細信息,請參閱手冊 )。 就像是:
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解釋器無法進行清理。 省略號捕獲只是為了確保不會發生這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.