控制台显示.obj文件时for循环出现TypeError: 'float' object is not callable
TypeError: 'float' object is not callable 错误解决
问题代码
vertices = [[2.4,5.6,2.1],[54.3,67.1,90.8],[21.9,73.5,12.3]] def main(): vertMinX = minmax(vertices, False) vertRangeX = minmax(vertices, True)-vertMinX for i in range(len(vertices)): print(1) normalize(vertices,vertMinX,vertRangeX) def minmax(data, max): n=0 val = data[0][n] if max: for i in range(len(data)): if val < data[i][n]: val = data[i][n] else: for i in range(len(data)): if val > data[i][n]: val = data[i][n] return val def normalize(data, min, range): for i in range(len(data)): print(1) main()
报错信息
1 1 1 Traceback (most recent call last): File "main.py", line 25, in <module> main() File "main.py", line 7, in main normalize(vertices,vertMinX,vertRangeX) File "main.py", line 23, in normalize for i in range(len(data)): TypeError: 'float' object is not callable
错误原因
核心问题是参数名与Python内置函数重名:
normalize函数的第三个参数用了range,而range是Python内置的生成序列的函数。调用normalize时传入的vertRangeX是一个float值(计算得到的范围值),这会把函数内部的range变量覆盖成这个float对象。- 当执行
for i in range(len(data))时,实际是在尝试调用这个float对象,自然触发"'float' object is not callable"错误。 - 另外,
min和max也是Python内置函数,用作参数名同样存在覆盖风险,只是这次没触发错误。
修复方案
修改参数名,避免与内置函数冲突:
vertices = [[2.4,5.6,2.1],[54.3,67.1,90.8],[21.9,73.5,12.3]] def main(): vertMinX = minmax(vertices, False) vertRangeX = minmax(vertices, True)-vertMinX for i in range(len(vertices)): print(1) normalize(vertices,vertMinX,vertRangeX) def minmax(data, max_flag): n=0 val = data[0][n] if max_flag: for i in range(len(data)): if val < data[i][n]: val = data[i][n] else: for i in range(len(data)): if val > data[i][n]: val = data[i][n] return val def normalize(data, min_val, range_val): for i in range(len(data)): print(1) main()
说明:
- 将
normalize的参数min改为min_val,range改为range_val - 将
minmax的参数max改为max_flag,提前规避与内置max函数的冲突
内容的提问来源于stack exchange,提问作者Baby_Boy
相关产品推荐
相关产品推荐

