繁体   English   中英

Python的循环元组索引超出范围

[英]python for loop tuple index out of range

我仍在尝试摆脱python的束缚,所以请耐心等待。 请。 我有一本书中使用的这段代码。 这本书无法在代码中正确显示空格,因此间距是我的最佳猜测。 该代码应将MySQL查询的结果分解为更易读的格式。

if form is True:
columns_query = """DESCRIBE %s""" % (table)
print columns_query
columns_command = cursor.execute(columns_query)
headers = cursor.fetchall()
column_list = []
for record in headers:
    column_list.append(record[0])
output=""
for record in results:
    output = output + "===================================\n\n"
for field_no in xrange(0, len(column_list)):
    output = output + column_list[field_no] + ": " + str(record[field_no]) + "\n"
output = output + "\n"

当我尝试运行它时,得到以下信息:

Traceback (most recent call last):
  File "odata_search.py", line 46, in <module>
    output = output + column_list[field_no] + ": " + str(record[field_no]) + "\n"
IndexError: tuple index out of range

它与代码的str(record[field_no])部分有关,但这就是书中的样子,所以我不确定还有什么尝试。

显然len(record) != len(column_list) (具体来说, column_list长度大于record 长度 )。 您是否有理由期望它们的长度相同?

一个“修复”将类似于:

for col,rec in zip(column_list,record):
    output += col + ": " + str(rec) + "\n"

代替:

for field_no in xrange(0, len(column_list)):
    output = output + column_list[field_no] + ": " + str(record[field_no]) + "\n"

这将在column_listrecord的较短者处截断输出。

无论如何,我建议您使用zip而不是range(0,len(...)) 这更惯用了。

原来的问题是空白,更重要的是MySQL查询本身。 我正在拉出一列中的行的列表,而不是拉出一行中的所有列,这就是将循环连接起来的方式。 我在错误查询的结果中得到的记录数不等于包含所有列的列表中的结果数。 该代码也打算是一个循环中的一个循环,因此我在顶部的间距是错误的。 它看起来应该像下面那样。 我在前面添加了几行以显示必须修改的查询:

旧语句像这样循环:

statement = """select %s from %s where %s like '%s' limit 10""" % (column, table, column, term)

应该看起来像这样:

statement = """select * from %s where %s like '%s' limit 10""" % (table, column, term)

command = cursor.execute(statement)
results = cursor.fetchall()

column_list = []
for record in results:
    column_list.append(record[0])

循环内循环:

if form is True:
columns_query = """DESCRIBE %s""" % (table)
columns_command = cursor.execute(columns_query)
headers = cursor.fetchall()
column_list = []
for record in headers:
    column_list.append(record[0])
output=""
for record in results:
    output = output + "===================================\n\n"
    for field_no in xrange(0, len(column_list)):
        output = output + column_list[field_no] + ": " + str(record[field_no]) + "\n"
    output = output + "\n"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM