2 回答

TA贡献1951条经验 获得超3个赞
附上我可以从您的邮件中得到的答复。
在Cython中可以使用Python对象,但是一旦您使用了
cdef
某些部分,就会受到限制。尝试通过“联合国”-捍卫字典。您所犯的错误表明您有一个表达式,
x[y]
其中x
有一个元组和y
一个int。原则上,它应该可以正常工作(用int应该为一个元组建立索引就可以了)。因此,您可以查看Cython中的方括号,以了解其来源。您提到删除了pxd文件。然后,您是否将扩展类/其他类型定义的完整声明移至pyx文件?

TA贡献1804条经验 获得超8个赞
扩展类型在编译中不是问题(至少在与主要cdef函数位于同一pyx文件中声明时);该错误发生在其他地方。
已解决:
AssertionError是由对该元组的简单索引访问引起的。
元组声明为:
cdef:
tuple curIRs
…并在嵌套循环中设置为:
for deriv1 in xrange(len(L1)):
for deriv2 in xrange(len(L2)):
curIRs = (deriv2, deriv1)
…并访问元组索引:
d1[ix] = (curIRs[0], curIRs[1])
这显然是无害的监督,curIRs不仅仅被存储,而是实质上通过索引访问来复制它。但是,这是由于未知原因而发生错误的地方:
当(curIRs [0],curIRs [1])替换为curIRs时,将AssertionError停止。
如评论中所述,由于pyx文件中的main函数是在python脚本中调用的,因此无法使用cdef对其进行定义。
Pierre de Buyl在评论中的建议非常有帮助:“删除潜在问题变量的cdef声明,直到错误解决。” 即在Python中可能没有错误的地方,Cython中可能会发现不兼容的地方
添加回答
举报