我正在创建自己的 Python 扩展(使用 SWIG,但我希望这不相关)。
在它的 C++ 方面,我使用 PyErr_NewException 创建自定义异常对象。
// C++ - create a custom Python Exception class.
m = Py_InitModule((char *) "MyModule", SwigMethods);
g_pyMyErr = PyErr_NewException( "MyModule.MyErr", 0, 0 );
Py_INCREF(g_pyMyErr);
int result = PyModule_AddObject(m, "MyErr", g_pyMyErr);
上面的代码返回成功值,我可以成功抛出上面的异常并在 Python 客户端代码中捕获它。
问题是这样的:当我在 Python 代码中引用“MyErr”时,我收到一条错误消息,指出“MyErr”未定义。
// Python client code - catch the exception
from MyModule import *
try:
causeException()
catch MyErr: # Error: MyErr is not defined.
pass
catch Exception:
pass
编辑:我目前的想法是,也许 SWIG 正在改变(修改)事物的名称。