2011-01-26 245 views
6

我正在使用一個庫,它在其API文檔中指定了一個定義從該庫的某個特定類繼承的類。該庫本身是用C++編寫的,並且使用SWIG生成了與Python的綁定。問題是,當我運行我的Python代碼時,無論Python拋出什麼異常,我都會收到錯誤信息:「在拋出'Swig :: DirectorMethodException'的實例後終止調用」。SWIG:從C++代碼報告Python異常

我想在執行我的程序時報告Python代碼引發此異常。特別是,那些我得到ZeroDivisionError的情況。

我試圖按照SWIG文檔http://www.swig.org/Doc2.0/Python.html#Python_nn36中描述的方法進行破解,但沒有運氣。我仍然得到相同的消息「在拋出'Swig :: DirectorMethodException'的實例之後調用terminate,無論我放在module.i文件中。

有人能給我一些關於如何解決這個問題的指針,這樣就可以報告Python異常嗎?

回答

1

我不知道多遠沿着你和你的代碼庫,所以這可能是沒有多大用處的,但我有更好的運氣與的boost ::蟒蛇痛飲。然後你可以這樣做:boost::python Export Custom Exception

+1

感謝您的幫助。我實際上解決了這個問題,修正在這裏:https://github.com/madhusudancs/mesos/commit/93ed9f32d8752d687d6b6af6bcb6bfdf815f115d這很簡單,但絕對沒有很好的文檔。此外,這不是我的項目,所以我只能建議開發人員使用boost :: python,但我不能讓它發生,雖然 – 2011-06-15 04:11:28

2

在程序的控制檯中報告由Python引發的異常。

這是來自Madhusudan.C.S的有用修復。 請參閱他對金諾博答案的評論。 我把它作爲答案,以便它變得更加明顯。

/* MyInterface.i */ 
%module(directors="1") MyInterface 
%feature("director:except") { 
    if($error != NULL) { 
     PyObject *ptype, *pvalue, *ptraceback; 
     PyErr_Fetch(&ptype, &pvalue, &ptraceback); 
     PyErr_Restore(ptype, pvalue, ptraceback); 
     PyErr_Print(); 
     Py_Exit(1); 
    } 
}