TypeError: SetPoint 参数 1:预期整数,获得浮点数

0 投票
3 回答
1027 浏览
提问于 2025-04-30 23:10

有人能帮我一下吗?

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 个回答

-1

试着把你每个值都用 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]))
0

问题不在于fl是否由浮点数构成,而在于InsertPoint这个方法要求每个值都是整数。

根据Python的文档:

exception TypeError:

当一个操作或函数应用于不合适类型的对象时,就会引发这个错误。相关的值是一个字符串,提供了关于类型不匹配的详细信息。

你粘贴的错误信息中已经清楚地显示了这一点——它包含了异常类型(TypeError)和引发异常的对象(InsertPoint)。如果你在数组索引中不小心包含了浮点数,异常就会由其他地方引发,而不是InsertPoint。

以后遇到异常错误时,可以在谷歌上查一下相关信息。我说的这些你在网上都能找到。

如果你还是想使用InsertPoints,有两个选择:

  1. 你可以使用(int)强制转换,把你的参数中的浮点数截断为整数(比如1.2会变成1,2.67会变成2,等等),像这样:

    int(fl[i+1][j+1][k+1])

  2. 你也可以选择第一种方法,但把值四舍五入到最接近的整数,像下面这样(记得要导入Math库):

    int(Math.Round(fl[i+1][j+1][k+1]))

0

如果你查看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)。

撰写回答