【发布时间】:2011-12-26 10:16:48
【问题描述】:
我正在开发一个服务器-客户端应用程序,其中客户端调用服务器的 API,该 API 为用户输入提供 Python 接口。这意味着客户端接口和服务器接口是用 Python 编写的,而套接字代码是用 C++ 编写的。
在服务器端:-
我有一个 C++ 类Test,该类使用SWIG 的director 特性在名为TestPython 的Python 中继承。
另外我在 C++ 中有一个异常类 MyException。
现在 TestPython 类的函数从 Python 代码中抛出 MyException()。
我想使用 SWIG 在 C++ 代码中处理 Python 抛出的异常。
下面是代码sn-p:
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(interface) 文件中写什么来处理这个问题。
上面用Python写的TestException()是客户端调用的,所以如果服务器抛出异常我必须通知客户端。
【问题讨论】:
-
您是否已经查看过有关此主题的 SWIG 文档? (swig.org/Doc2.0/SWIGDocumentation.html#Customization_exception)
-
您可能希望更明显地表明您正在使用 SWIG 的导演功能 - 我第一次阅读这个问题时错过了它,并且在您的代码中根本没有任何暗示已经显示了。
-
@gecco - 该文档根本不适用于导演(即
director:except)的 SWIG Python 代码引发的异常。