列表索引超出范围?

时间:2013-11-06 01:52:42

标签: python python-3.x sqlite

def print_db():
    con = lite.connect('master.db')
    print ('Enter a first name:')
    firstname = input('> ')
    with con:
        cur = con.cursor()
        data = cur.fetchone()
        cur.execute("SELECT * FROM Contacts WHERE First = (?);", (firstname,))
        list_title = ['First Name', 'Last Name', 'Phone', 'Email']
        k = 0
        for i in cur:
            print ("\n")
            for j in i:
                print (list_title[k],)
                print (j)
                if k < 5: k+=1
                else:
                    k = 0

    print (data)
    print ('Enter 1 to return to main menu')
    userinput = input('> ')
    if userinput == "1":
        main()
    else:
        main()
  

回溯列表索引超出print(list_title)[k],)

的范围

好了,所以你可以看到整个功能。

2 个答案:

答案 0 :(得分:3)

在k达到k < 5之前,

5仍然有效,这意味着k的最大数量为4。请记住,列表索引从0开始计算,因此k的最高索引为3

因此,当您尝试获取list_title[4]时,您将获得IndexError

您必须将k < 5更改为k < 4

for j in i:
            print (j)
            if k < 4: 
                print (list_title[k],) #Move it to the condition here
                k+=1
            else:
                k = 0

这样,当k的值为4时,k将重置为0,错误将永远不会发生。

希望这有帮助!

答案 1 :(得分:1)

使用enumerate()

,而不是手动递增索引
for k, j in enumerate(i):
    print (list_title[k],)
    print (j)

或更好,请使用zip()

for k, j in zip(list_title, i):
    print (k, j)

以下是关于Python循环的精彩演示:http://nedbatchelder.com/text/iter.html