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

时间:2014-10-31 21:30:55

标签: python vtk

有人可以帮我这个吗?

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应该有浮动,我有来自真实世界实验的数组,我不能将值更改为int。

这是一个与InsertPoint有关的问题,是否仅采用int?有人可以帮我解决吗?

另外,我没有Python经验,从未编写过程序,这是我正在使用的第一个程序,我对旧程序进行了更改以使其适用于我的目的,但可以&#39 ;弄清楚我做错了什么

谢谢:)

3 个答案:

答案 0 :(得分:0)

问题不在于fl是否由浮子组成。问题是InsertPoint的方法签名期望每个值都是int。

来自python文档:

exception TypeError:
  

将操作或函数应用于不适当类型的对象时触发。关联值是一个字符串,提供有关类型不匹配的详细信息。

此信息在您粘贴的错误消息中清晰可用 - 它具有异常类型(TypeError)和抛出它的对象(InsertPoint)。如果你不小心在数组索引器中包含了一个浮点数,那么异常就会被InsertPoint以外的东西抛出。

将来,您应该根据异常错误对Google进行一些研究。我没告诉你在那里找不到任何东西。

如果您仍想使用InsertPoints,则有两个选项:

  1. 你可以使用(int)强制转换来截断编辑:你的整个参数的第一个整数值(1.2截断为1,2.67到2等),如下所示:

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

  2. 您可以执行#1,但将值四舍五入到最接近的整数值,如下所示(请记住,您需要导入Math):

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

答案 1 :(得分:0)

如果查看vtkpoints :: InsertPoint的文档,您会看到预期的参数是(id,x,y,z)。当您需要设置位置id处的点值时(这就是为什么它必须是整数),您可以使用此方法。 http://www.vtk.org/doc/nightly/html/classvtkPoints.html#ab7f990c73fb291737abe4203994ce2a2

从python shell中,您也可以检查help(pts.InsertPoint) - 但由于这些是包装对象,有时帮助看起来有点模糊。

方法InsertNextPoint只需要x,y,z,可以像你一样使用。它不需要显式id,因为它只是你的结尾

特别是对于python,您可能也对vtk.util.numpy_support感兴趣,这使得numpy和vtk元素之间的转换更容易(您可以将您的点从numpy转换为vtkdoublearray,然后使用方法setdata将其分配给vtkpoints)

答案 2 :(得分:-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]))