如何从 swig C++ 代码中引发 StopIteration?

Oin*_*Oin 3 c++ python swig

我正在尝试通过在类上实现 python 迭代协议来扩展 C++ 库。问题是尝试从 next() 方法引发 StopIteration 异常会使程序出现 SegFault。我用来从 C++ 代码(在 python.i 中)引发异常的方法是这里描述的方法:http ://www.swig.org/Doc1.3/Python.html#Python_nn44

尽管该列表没有列出 StopIteration 异常,但这是我尝试过的:

PyErr_SetString(PyExc_StopIteration, NULL);
Run Code Online (Sandbox Code Playgroud)

Oin*_*Oin 5

所以正确的答案似乎是 next() 方法必须返回一个 PyObject* 并且还使用 SetNone。所以它看起来像这样:

PyObject* next(PyObject* self) {
  if (i < n) {
         \\ go on iterating
  } else {
         PyErr_SetNone(PyExc_StopIteration);
         return NULL;
  }
}
Run Code Online (Sandbox Code Playgroud)

感谢 aix 的链接!