1
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()

回溯列表索引在打印时超出范围 (list_title)[k],)

好的更新,所以你可以看到整个功能。

4

2 回答 2

5

k < 5在 k 达到 之前仍然是真的,这意味着is5的最大数量。请记住,列表索引从 开始计数,因此最高索引为。k40k3

所以,当你尝试得到 时list_title[4],你会得到一个IndexError.

您必须更改k < 5k < 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

这样,当 的值为 时k4k被重置为0,并且永远不会发生错误。

希望这可以帮助!

于 2013-11-06T02:02:00.100 回答
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

于 2013-11-06T02:26:52.200 回答