有没有办法解决这个 TypeError

Posted

技术标签:

【中文标题】有没有办法解决这个 TypeError【英文标题】:Is there a way to solve this TypeError 【发布时间】:2020-02-25 12:18:19 【问题描述】:

我无法弄清楚我的代码有什么问题。我需要帮助。

next(fhr) # skip header row
customer_list = [] # initialize empty customer list

for line in fhr:
    ls = line.split(',')
    customer_list.append([ls[0], ls[1], ls[2], ls[3], ls[4], ls[5], ls[6], int(ls[7]), ls[8], ls[9], ls[10].strip('\n')])

from operator import itemgetter
customer_list.sort(key=itemgetter(7), reverse=True)
print(customer_list)

writepath = './loan-data-output-v1.csv'
fwh = open(writepath, 'w', encoding='utf-8')
fwh.write('Name' +','+ 'State' +','+'Age' +','+'Annual Income'+','+ 'Loan Type' +','+' Loan Amount' +','+ 'Length of Loan in Years' +','+ 'Days Delinquent' +','+ 'Interest Rate' +','+ 'Number of Loans Prior' +','+'Years as Customer' + '\n')

for i in customer_list:
    if customer_list[i][7] >= 90:
        fwh.write(customer_list[i][0] + ',' + customer_list[i][1] + ',' + customer_list[i][2] + ',' + customer_list[i][3] + ',' + customer_list[i][4] + ',' + customer_list[i][5] + ',' + customer_list[i][6] + ',' + customer_list[i][7] + ',' + customer_list[i][8] + ',' + customer_list[i][9] + ','+ customer_list[i][10] + '\n')
fhr.close()
fwh.close()

我在最后一个 for 循环中收到此错误,我不知道该怎么办。有人可以帮忙吗。 TypeError: 列表索引必须是整数或切片,而不是列表

【问题讨论】:

见***.com/a/522578/2970853 这能回答你的问题吗? Accessing the index in 'for' loops? 也许你可以试试:for i in range(len(customer_list)): 什么是customer_list 【参考方案1】:

您正在使用列表列表,因此当您使用for i in list_of_list 时,i 本身就变成了一个列表..

for i in customer_list:
    if i[7] >= '90':
        fwh.write(i[0] + ',' + i[1] + ',' + i[2] + ',' + i[3] + ',' + i[4] + ',' + i[5] + ',' + i[6] + ',' + str(i[7]) + ',' + i[8] + ',' + i[9] + ','+ i[10] + '\n')
fhr.close()
fwh.close()

您也可以使用,

for i in range(0,len(customer_list)):
    if customer_list[i][7] >= '90':
        fwh.write(customer_list[i][0] + ',' + customer_list[i][1] + ',' + customer_list[i][2] + ',' + customer_list[i][3] + ',' + customer_list[i][4] + ',' + customer_list[i][5] + ',' + customer_list[i][6] + ',' + str(customer_list[i][7]) + ',' + customer_list[i][8] + ',' + customer_list[i][9] + ','+ customer_list[i][10] + '\n')
fhr.close()
fwh.close()

编辑:第二种方法假定customer_list 的长度是恒定的,或者换句话说,您在循环期间没有向customer_list 添加任何内容。感谢DanielRoseman 指出第二个代码中的潜在错误..

编辑 2: 感谢quamrana 提出这样的建议,

for i in customer_list:
    if i[7] >= '90':
        i[7] = str(i[7])
        fwh.write(','.join(i[0:11]) + '\n')
fhr.close()
fwh.close()

【讨论】:

不推荐第二个。这几乎从来没有在 Python 中是正确的。 为什么会这样,如果是这样的话,我很高兴在 python 中看到新的东西..:) 因为第一种方式是正确的。始终迭代事物本身,而不是事物的 len 范围。 但是是什么让你认为迭代 len 的东西是不正确的?是否存在任何潜在的错误或效率低下? @DanielRoseman 我想我明白了你的意思,len(thing) 只执行一次,如果我们在循环中添加一些东西到thing 我们不能迭代新添加的东西。我明白了,谢谢你纠正我。:)

以上是关于有没有办法解决这个 TypeError的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法解决这个错误:“CloudKit 集成需要不支持有序关系。”

有没有办法用我的排行榜解决这个错误?

有没有办法解决这个问题? +如何将代码保存到我的计算机中

大多数时候 OCR 将 < 识别为 K。有没有办法解决这个问题?

Ubuntu 14.04没有chkconfig服务解决办法

Cayenne Modeler 3.1.2 在 Windows 3.1.2 上使用小字体。有没有办法解决这个问题?