Python错误-列表索引超出范围错误,但不是

时间:2019-05-25 15:47:48

标签: python

编辑:现在可以正常工作了,谢谢。有人评论

时,文本文件上的空白行

这里的初学者-我收到一条错误消息,说列表索引超出范围,但是我引用的是列表中应该在范围内的位置。错误出现在“ courseGPA = GPAconverter(line [2])”行上,该行调用了我的函数GPAconverter。

我正在尝试创建一个程序,该程序读取包含课程,该课程的权重和该课程的成绩的文本文件的每一行。我希望它阅读课程成绩,通过我创建的功能将其转换为GPA。然后最终我希望代码输出我的最终GPA。

txt文件的格式为:

数学,0.5、80

for line in inputFile:

    line = line.rstrip()
    line = line.split(",")
    courseGPA = GPAconverter(line[2])
    if float(line[1]) == 0.5:
        count = count + 1
        totalGPA += courseGPA
    elif float(line[1]) == 1.0:
        count = count + 2
        totalGPA += 2*(courseGPA)
    elif float(line[1]) == 2.0:
        count += 4
        totalGPA += 4*(courseGPA)
    else:
        print("Somethings wrong")

2 个答案:

答案 0 :(得分:0)

文本文件中的某些记录/行很有可能少于3个令牌,最好在解析或传递令牌之前先清理令牌的数量。

答案 1 :(得分:0)

我认为这是您想要的:

def GPAconverter(param):
    #do something

with open("yourfile.txt") as file:
    inputFile = file.readlines()
    count = 0
    totalGPA = 0
    for line in inputFile:
        line = line.rstrip()
        line = line.split(",")
        courseGPA = GPAconverter(line[2])
        if float(line[1]) == 0.5:
            count = count + 1
            totalGPA += float(courseGPA)
        elif float(line[1]) == 1.0:
            count = count + 2
            totalGPA += 2*float(courseGPA)
        elif float(line[1]) == 2.0:
            count += 4
            totalGPA += 4*float(courseGPA)
        else:
            print("Something is wrong")

print(totalGPA)

yourfile.txt的内容:

Math, 0.5, 80
Math, 0.5, 80
Math, 0.5, 80
Math, 0.5, 80
Math, 0.5, 80
Math, 0.5, 80
Math, 0.5, 80
Math, 0.5, 80
Math, 0.5, 80
Math, 0.5, 80
...
...

您应该可以用所需的内容替换内容,但是内容必须至少有三列,并且第二个和第三个元素必须是数字,否则将引发错误,除非您编辑代码以使其工作不同

正如@Devesh Kumar Singh所说,文件中可能有空行。此代码应删除它们:

import fileinput
for line in fileinput.FileInput("file",inplace=1):
    if line.rstrip():
        print line

来源:How to delete all blank lines in the file with the help of python?,@ ghostdog74