我正在开发一个服务器 - 客户端应用程序,其中客户端调用服务器的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