我正在尝试通过在类上实现 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)
所以正确的答案似乎是 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 的链接!
| 归档时间: |
|
| 查看次数: |
1053 次 |
| 最近记录: |