TypeError: SetPoint 参数 1:预期整数,获得浮点数
有人能帮我一下吗?
pts.InsertPoint(fl[i+1][j+1][k+1], xx[0][i+1], yy[0][j+1], zz[0][k+1])
TypeError: InsertPoint argument 1: integer argument expected, got float
fl应该是浮点数,我有一个来自现实实验的数组,我不能把这些值改成整数。
这是不是和InsertPoint有关,是不是它只接受整数?有人能帮我解决这个问题吗?
另外,我对Python没有经验,从来没有写过程序,这是我第一次接触编程,我只是对一个旧程序做了一些修改,让它能满足我的需求,但我不知道我哪里做错了。
谢谢 :)
3 个回答
试着把你每个值都用 int()
包裹起来,像这样:
pts.InsertPoint(int(fl[i+1][j+1][k+1]), int(xx[0][i+1]), int(yy[0][j+1]), int(zz[0][k+1]))
问题不在于fl是否由浮点数构成,而在于InsertPoint这个方法要求每个值都是整数。
根据Python的文档:
exception TypeError:
当一个操作或函数应用于不合适类型的对象时,就会引发这个错误。相关的值是一个字符串,提供了关于类型不匹配的详细信息。
你粘贴的错误信息中已经清楚地显示了这一点——它包含了异常类型(TypeError
)和引发异常的对象(InsertPoint
)。如果你在数组索引中不小心包含了浮点数,异常就会由其他地方引发,而不是InsertPoint。
以后遇到异常错误时,可以在谷歌上查一下相关信息。我说的这些你在网上都能找到。
如果你还是想使用InsertPoints,有两个选择:
你可以使用(int)强制转换,把你的参数中的浮点数截断为整数(比如1.2会变成1,2.67会变成2,等等),像这样:
int(fl[i+1][j+1][k+1])
你也可以选择第一种方法,但把值四舍五入到最接近的整数,像下面这样(记得要导入Math库):
int(Math.Round(fl[i+1][j+1][k+1]))
如果你查看vtkpoints::InsertPoint的文档,你会看到它需要的参数是(id,x,y,z)。你使用这个方法是为了设置在位置id的点的值(所以id必须是一个整数)。http://www.vtk.org/doc/nightly/html/classvtkPoints.html#ab7f990c73fb291737abe4203994ce2a2
在python的命令行中,你也可以检查一下help(pts.InsertPoint)
- 不过因为这些是封装对象,有时候帮助信息看起来会有点晦涩。
而InsertNextPoint这个方法,只需要x,y,z三个参数,你可以像你现在这样使用。它不需要明确的id,因为它会把你的点放在最后。
特别是对于python,你可能还会对vtk.util.numpy_support感兴趣,它可以让numpy和vtk元素之间的转换更简单(你可以把你的点从numpy转换成vtkdoublearray,然后用setdata方法把它赋值给vtkpoints)。