索引错误:元组索引超出范围 ----- Python

64

请帮忙。我正在运行一个简单的Python程序,它将在tkinter表单中显示来自MySQL数据库的数据...

from Tkinter import *
import MySQLdb

def button_click():
    root.destroy()

root = Tk()
root.geometry("600x500+10+10")
root.title("Ariba")

myContainer = Frame(root)
myContainer.pack(side=TOP, expand=YES, fill=BOTH)

db = MySQLdb.connect ("localhost","root","","chocoholics")
s = "Select * from member"
cursor = db.cursor()
cursor.execute(s)
rows = cursor.fetchall()

x = rows[1][1] + " " + rows[1][2]
myLabel1 = Label(myContainer, text = x)
y = rows[2][1] + " " + rows[2][2]
myLabel2 = Label(myContainer, text = y)
btn = Button(myContainer, text = "Quit", command=button_click, height=1, width=6)

myLabel1.pack(side=TOP, expand=NO, fill=BOTH)
myLabel2.pack(side=TOP, expand=NO, fill=BOTH)
btn.pack(side=TOP, expand=YES, fill=NONE)

这就是整个程序...

错误是

x = rows[1][1] + " " + rows[1][2]
IndexError: tuple index out of range

y = rows[2][1] + " " + rows[2][2]
IndexError: tuple index out of range

有人可以帮助我吗?我是Python新手。

非常感谢...


8
提示你正在访问的索引(位置)不存在。 - Ramchandra Apte
我需要替换哪些代码到我的现有代码中?谢谢。 - MSanz
6
我不知道,你能否提供一个小而完整的可重现示例,并编辑你的问题以包括它。 - Ramchandra Apte
1
你应该尝试打印(rows)和print(rows[1]),以查看你的数据长什么样子。这可能会帮助你找到问题所在。 - Soravux
当我将train_sizes=np.linspace(0.1, 1.0, 10)更改为train_sizes=10时,出现了以下错误。 - Mr-Programs
4个回答

66

可能一个索引有误,要么是内部的索引有误,要么是外部的索引有误。

我怀疑您在说[1]时其实想说的是[0],而当您提到[2]时想说的应该是[1]。在Python中,索引是从0开始计数的。


28
我收到这个消息是因为我向一个期望可变参数序列的函数传递了一个数组(例如 '{}{}'.format([1,2])'{}{}'.format(*[1,2]))。在后者中,*运算符将数组解包成可变参数序列。 - amr
15
另一种情况是在字符串中意外地有两个 '{}',而在.format()中只有一个变量/值。 - Dror
1
如果在参数列表中出现了错误的赋值运算符(=),那么这也是其中一个原因。我曾经移动过一些代码,结果就出现了这种情况。 - Seldom 'Where's Monica' Needy
1
作为对Dror评论的一种变体:在格式化字符串中使用{}而不是{{}}。当有人想要字面上打印一对花括号时,这是一个典型的复制粘贴错误。 - cfi
我也遇到了同样的错误,请检查以下链接 https://stackoverflow.com/questions/46945860/getting-error-when-converting-a-pyscript-to-exe-using-py2exe - Pyd
在我的情况下,我从1开始对print中的参数进行编号,而不是从0开始。例如:print({1}.format('Hello')) 应该是 print({0}.format('Hello')) - Artem Mostyaev

5
一个元组由用逗号分隔的多个数值组成。例如:
>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345

在Python中,元组是基于索引的(同时也是不可变的)。

在这种情况下,x = rows[1][1] + " " + rows[1][2]仅有两个索引0、1可用,但你正在尝试访问第三个索引。


-1
这是因为你的row变量/元组在该索引处不包含任何值。你可以尝试像print(row)一样打印整个列表,并检查存在多少个索引。

1
好建议...帮了我。 - Doug_Ivison

-1
我遇到了相同的错误:
query = "INSERT INTO table(field1, field2,...) VALUES (%s,%s,...)"
但在语句
cursor.execute(query, (field1, field2,..)
中,我传递的变量比需要的少...
在这种情况下,我使用了
import mysql.connector as mysql 

我只是想说这也是可能的...不仅仅在数组中
(我没有非常仔细地看这个特定的情况...)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接