Python:TypeError:' float'对象不可订阅

时间:2015-03-24 00:45:59

标签: python typeerror

def get_data(fp):
    data = []
    for line in fp:
        line_list_ints = [int(number) for number in line.split()]
        data.append(line_list_ints)
    return data

def calculate_grades(data):
    for line in data:
        total_points = sum(line[1:6])
        grade = get_grade(total_points)
        data.insert(0,total_points)
        data.insert(1,grade)
    return data

我收到TypeError:' float'对象不能用于第10行的可订阅。我不明白为什么在将数字附加到数据列表之前将数字转换为整数。有人可以帮忙吗?我清楚了吗?

3 个答案:

答案 0 :(得分:1)

问题在于,当您使用data中的data.insert进行迭代时,您正在修改calculate_grades列表。这导致循环的第二次迭代,将前一次迭代中的grade值看作line,而不是它期望的整数列表。

我不完全明白你要做什么,所以我不能直接建议解决方案。也许您应该为输出创建单独的列表,或者在适当的位置修改line,而不是将新项目插入data

答案 1 :(得分:1)

具体问题是因为数据中存在浮动(最终)

for line in data:
    total_points = sum(line[1:6])
    grade = get_grade(total_points)
    data.insert(0,total_points)
    data.insert(1,grade)

因为您将其插入列表中,因为等级'

一般的问题是你在迭代它时修改你的列表('数据'),这是一个坏主意 - 你的逻辑很难读取,并且很容易循环。

答案 2 :(得分:0)

呃,问题是第10行的line[1:6]部分。变量line是一个浮点数,所以你不能拿一个子列表。