我正在開發一個服務器 - 客戶端應用程序,其中客戶端調用服務器的API,該API爲用戶輸入提供Python接口。這意味着客戶端接口和服務器接口是用Python編寫的,而套接字代碼是用C++編寫的。在C++中捕獲Python異常
在服務器端: -
我有一個類,Test
,C++和這個類是繼承使用Python中的SWIG主任特徵命名TestPython。 另外我在C++中有一個異常類MyException。
現在TestPython類的一個函數從Python代碼中拋出MyException()
。
我想處理在C++代碼中使用SWIG從Python拋出的異常。
下面的代碼片段:
C++代碼 -
class MyException
{
public:
string errMsg;
MyException();
MyException(string);
~MyException();
};
class Test
{
int value;
public:
void TestException(int val);
Test(int);
};
Python代碼 -
class TestPython(Test):
def __init__(self):
Test.__init__(self)
def TestException(self,val):
if val > 20:
throw MyException("MyException : Value Exceeded !!!")
else:
print "Value passed = ",val
現在,如果TestException()
函數被調用,它應該拋出MyException
。我想在我的C++代碼中處理這個MyException()
異常。
所以任何人都可以建議我如何做到這一點,我的意思是我應該在我的* .i(接口)文件中編寫來處理這個問題。
以Python編寫的上述TestException()
由客戶端調用,所以如果服務器拋出任何異常,我必須通知客戶端。
你有沒有看過關於這個主題的SWIG文檔? (http://www.swig.org/Doc2.0/SWIGDocumentation.html#Customization_exception) – gecco
你可能想讓它更明顯一點,就是你使用了SWIG的導演功能 - 我第一次讀這個時就錯過了它問題,並且在你展示的代碼中根本沒有任何提示。 – Flexo
@gecco - 該文檔不適用於由SWIG引發的異常Python代碼來自導演(即'director:except')。 – Flexo