为何向Python array模块创建的整数数组追加输入float值时会报TypeError?
报错核心原因解析
基础代码与报错复现
原实现代码:
from array import * a=array('i',[]) for i in range (5): x = float(input("enter the element of array:")) a.append(x) for i in range (5): print(a[i], end=" ")
运行触发的报错输出:
enter the element of array:3.5
TypeError Traceback (most recent call last)
in ()
5 for i in range (5):
6 x=float(input("enter the element of array:"))
----> 7 a.append(x)
8 for i in range (5):
9 print(a[i],end=" ")TypeError: integer argument expected, got float
错误根因
Python标准库array模块创建的数组具备强类型锁定特性,和无类型约束的普通Python列表不同:
- 数组初始化时传入的第一个参数为固定类型码,会从创建阶段就锁死整个数组可存储的数据类型,后续所有追加、插入的元素都必须匹配该预设类型,否则会直接触发类型校验错误。
- 代码中初始化数组时使用的类型码
'i',对应C语言标准带符号整型(int),即该数组从创建起就被限定只能存储整数,无法容纳浮点数。当将转换为float类型的输入值传入append方法时,模块的类型校验识别到传入参数和预设的整数类型不匹配,最终抛出对应类型错误,也就是报错提示中“期望收到整数参数,实际获取到浮点数”的来源。
修正方向
如果需要存储浮点数,仅需将初始化阶段的类型码替换为对应浮点数的标识即可:
- 类型码
'f'对应单精度浮点数数组 - 类型码
'd'对应双精度浮点数数组,和Python原生float的精度完全匹配
例如将初始化语句修改为a = array('d', [])后,追加浮点数的操作即可正常运行。
内容的提问来源于stack exchange,提问作者Mehedi Hasan Rony
相关产品推荐
相关产品推荐

