【问题标题】:Python ctypes - TypeError: int expected instead of floatPython ctypes - TypeError:预期为int而不是float
【发布时间】:2014-08-27 10:20:40
【问题描述】:

我尝试将 python 列表转换为 ctype 数组。但不知何故,我总是在这段代码的行中收到错误“TypeError:int期望而不是float”:

    self.cValues = (ctypes.c_int * len(self.values))(*self.values)

我在几行之前创建了 self.values。这是一个普通的python列表。 我 100% 确定,len(self.values) 是一个整数,我用 type() 函数对其进行了测试,结果是类 'int'。那么这条线还有什么问题呢?感谢您的帮助。

【问题讨论】:

  • 再看看你在这里粘贴的内容......它甚至不是一个有效的表达式。
  • @JeffMercado 你是什么意思?我在这里做到了:stackoverflow.com/questions/4145775/… 或者你的意思是自我?
  • 好的,看到错误,我删除了。抱歉,复制粘贴失败。但这个问题还是一样。
  • 我对 self.values 真正包含的内容持怀疑态度:你能打印出它的 repr() 吗?例如,如果 values 是一个整数列表,则您的表达式可以正常工作:values = [0,1,2,3,4,5]; cValues = (ctypes.c_int * len(values))(*values)。但是,如果 values 是浮点数列表,或者与浮点数混合的整数等,它将被炸毁:values = [0,1.0,2,3,4,5]; cValues = (ctypes.c_int * len(values))(*values) 得到与您发布的相同的错误。
  • 列表中实际上有浮点数。我认为问题出在 len() 函数上。有没有办法用浮点数制作一个 ctype 数组?我不会打印出repr,因为数组是一个100000行的3D对象坐标数组^^

标签: python python-3.x ctypes


【解决方案1】:

问题不在于 len() 函数,而在于 self.values 是浮点列表而不是整数列表。用一个独立的小例子试试看:

import ctypes
values = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
cValues = (ctypes.c_int * len(values))(*values)

用你得到的“TypeError:int期望而不是float”消息轰炸出去。如果您将值更改为整数,即values = [0, 1, 2, 3, 4, 5],它可以正常工作。或者,由于您在上一条评论中说 self.values 是一个浮点列表,您可能希望像这样使用ctypes.c_float

values = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
cValues = (ctypes.c_float * len(values))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多