2017-09-02 37 views
0

我有以下代码指数误差

代码段

def quiz(dr): 
    print("===Quiz===") 
    print("You have selected a question rating of: ", dr) 
    question_count=0 
    while question_count<4: 
    with open('questions.txt','r') as f: 
     reader=csv.reader(f,delimiter=",") 
     for line in reader: 
      print(line[0]) 
      question_count=question_count+1 

打印在文本文件中的问题(所有五个人),其中恰好是在文本文件中的每一行,但随后的指数[0]产生一个索引超出范围的错误

错误

File "C:/Users/User/Desktop/task1/v7.py", line 135, in history 
    print(line[0]) 
IndexError: list index out of range 

文本文件的内容

Question1?,a,b,cario,d,e,3 
Question2?,adolf,b,c,d,e,1 
Question3?,a,b,c,d,e,1 
Question4?,a,b,c,d,e,1 
Question5?,a,b,c,d,e,1 

谁能 一)具有明确的解释,什么是错的 二)建议修改上述功能修复错误,使其更加优雅/ pythonic

回答

1

在某处可能存在空行(在结束时难以发现),因此csv模块会发出空行。空行有时通过写csv文件不正确(忘记设置二进制模式蟒蛇2,不忘补充newline=""为Python 3)

要计算非空行只是忘记了for循环和刚刚生成做到:

question_count = sum(1 for line in reader if line) 

请注意,使用此方法,您必须倒带文件才能获取内容。另一种方法是先将行存储在列表中:line = list(line)。 (以上代码仍然适用)

+0

谢谢!你能为上述功能提供更优雅的代码吗? – MissComputing

+0

我已经做了一些,建议删除你的循环 –