簡體   English   中英

如何在python中捕獲異常(在C ++中引起)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM