如何从swig C++;密码? 我试图通过在类上实现Python迭代协议来扩展C++库。问题是,试图从next()方法引发StopIteration异常会导致程序出现SegFault。用于从C++代码中(Python i)中引发异常的方法是这里描述的:
虽然该列表中没有列出StopIteration异常,但这是我尝试过的:如何从swig C++;密码? 我试图通过在类上实现Python迭代协议来扩展C++库。问题是,试图从next()方法引发StopIteration异常会导致程序出现SegFault。用于从C++代码中(Python i)中引发异常的方法是这里描述的:,c++,python,swig,C++,Python,Swig,虽然该列表中没有列出StopIteration异常,但这是我尝试过的: PyErr_SetString(PyExc_StopIteration, NULL); segfault几乎肯定是由传递给PyErr\u SetString的空指针引起的。请尝试以下操作: PyErr_SetString(PyExc_StopIteration, "end of collection"); edit我刚刚看到了下面一篇精彩的文章,你可能会发现这篇文章很有用:所以正确的答案似乎是next()方法必须返回Py
PyErr_SetString(PyExc_StopIteration, NULL);
segfault几乎肯定是由传递给
PyErr\u SetString
的空指针引起的。请尝试以下操作:
PyErr_SetString(PyExc_StopIteration, "end of collection");
edit我刚刚看到了下面一篇精彩的文章,你可能会发现这篇文章很有用:所以正确的答案似乎是next()方法必须返回PyObject*并使用SetNone。所以看起来是这样的:
PyObject* next(PyObject* self) {
if (i < n) {
\\ go on iterating
} else {
PyErr_SetNone(PyExc_StopIteration);
return NULL;
}
}
PyObject*next(PyObject*self){
if(i
感谢aix提供的链接 对。python解释器似乎不认为这是StopIteration异常。它不会退出循环,而是永远继续下去。我认为这可能根本不是提出错误的正确机制?代码似乎只是将该消息发送到stderr,但没有引发python异常…@mapleoin:如果您还没有看到,请看一看。