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 が に達するまで true のままです。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

このようにすると、 の値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 に答える