如何从 swig C++ 引发 StopIteration代码?
我正在尝试通过在类上实现 python 迭代协议来扩展 C++ 库。问题是,尝试从 next() 方法引发 StopIteration 异常会使程序出现 SegFault。我用于从 C++ 代码(在 python.i 中)引发异常的方法是此处描述的方法:http://www.swig.org/Doc1.3/Python.html#Python_nn44
虽然该列表没有列出 StopIteration 异常,但这就是我尝试过的:
PyErr_SetString(PyExc_StopIteration, NULL);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因此,正确的答案似乎是 next() 方法必须返回 PyObject* 并且还使用 SetNone。所以它看起来像这样:
感谢 aix 提供的链接!
So the right answer seems to be that the next() method must return a PyObject* and also use SetNone. So it would look like this:
Thanks to aix for the link!
段错误几乎肯定是由您传递给
PyErr_SetString
的 NULL 指针引起的。请尝试以下操作:编辑我刚刚看到以下精彩的帖子,您可能会发现它很有用:如何使用 Python C API 创建生成器/迭代器?
The segfault is almost certainly caused by the NULL pointer you've passing to
PyErr_SetString
. Try the following instead:edit I've just come across the following excellent post, which you may find useful: How to create a generator/iterator with the Python C API?