【发布时间】:2017-09-24 13:32:31
【问题描述】:
我正在尝试从以下位置升级: SWIG 2.0.11 和 Python 2.7.12 到 SWIG 3.0.12 和 Python 3.6, 但是当我在任何迭代器上运行测试时出现以下异常(使用 %template 自动生成):
SystemError: <built-in function xxx_iterator> returned a result with an error set
例如,即使是最简单的迭代也会失败:
Traceback (most recent call last):
File "testRender.py", line 459, in testRender
for v in vertices:
File "ncore.py", line 90833, in __iter__
return self.iterator()
File "ncore.py", line 90830, in iterator
return _ncore.Vertices_iterator(self)
SystemError: <built-in function Vertices_iterator> returned a result with an error set
有什么想法吗?
再一次,这一切都与 SWIG 2.0.11 和 Python 2.7.12 配合得很好......
编辑:添加更简单的示例:
它可以是任何 %template-generated 迭代器,例如,在 .i 文件中定义的这个模板:
%template(Ints) std::list<int>;
使用这个简单的代码会失败:
intsList = ncore.Ints()
intsList.append(1)
intsList.append(2)
for i in intsList:
print(i)
带有类似这样的消息:
Traceback (most recent call last):
File "testRender.py", line 459, in testRender
for i in intsList:
File "ncore.py", line 90833, in __iter__
return self.iterator()
File "ncore.py", line 90830, in iterator
return _ncore.Ints_iterator(self)
SystemError: <built-in function Ints_iterator> returned a result with an error set
【问题讨论】:
-
不知道
Vertices_iterator的源代码是不可能提供任何帮助的。 -
仅供参考,看起来此提交 (github.com/swig/swig/pull/560/files) 试图修复类似问题...
-
如果您希望我能够查看此内容,您需要一个真正的最小完整示例,我可以在自己的调试器中运行该示例。我之前忽略了它,因为没有一个,即使有赏金我仍然无能为力。回溯显示了至少 459 行 Python 代码,您在“简单测试用例”中没有显示这些代码可能是相关的,并且天知道在 ncore C 和 Python 生成的代码的其余部分中还有多少其他代码。如果您真的想要一个答案,您需要将其隔离为我们可以重现的东西。