我想通過在類上實現python迭代協議來擴展C++庫。問題是試圖從next()方法引發StopIteration異常使程序SegFault。我用來從C++代碼(在python.i中)引發異常的方法是這裏描述的方法:http://www.swig.org/Doc1.3/Python.html#Python_nn44如何從Swig C++代碼中提取StopIteration?
儘管該列表沒有列出StopIteration異常,但我嘗試過:
PyErr_SetString(PyExc_StopIteration, NULL);
是的。這似乎並沒有被Python解釋器識別爲StopIteration異常。它不會退出循環,而是永遠持續下去。我認爲這可能不是提升錯誤的正確機制?代碼只是似乎將該消息發送到stderr,但沒有引發python異常... – Oin
@mapleoin:看看http://stackoverflow.com/questions/1815812/how-to-create-a-generator-迭代器與python-c-api/1816961#1816961如果你還沒有。 – NPE