python函数列表索引必须是整数错误

时间:2013-01-17 16:01:38

标签: python python-2.4

.txt文件包含3个字段逗号(,)分隔文本,数字和一些特殊字符,只运行for row in sortedlist: print row[1]例如可以正常工作。

import csv
import operator
import sys

inf = csv.reader(open('data.txt','r'))
sortedlist = sorted(inf, key=operator.itemgetter(2), reverse=True)

def dothis(x):
    for row in sortedlist:
        print row[x]

if __name__ == "__main__":
    c = sys.argv[0]
    if (c == ''):
        raise Exception, "missing first parameter - row"
    dothis(c)

我收到以下错误 -

python test.py 1 Traceback (most recent call last):   File "test.py", line 16, in ?
    dothis(c)   File "test.py", line 10, in dothis
    print row[x] TypeError: list indices must be integers

我做错了什么?

2 个答案:

答案 0 :(得分:2)

在您显示的代码中,c因此x设置为sys.argv[0],这是一个字符串。您不能使用字符串索引到列表中。

你的意思是说:

if __name__ == "__main__":
    if len(sys.argv) < 2:
        raise Exception, "missing first parameter - row"
    c = int(sys.argv[1])
    dothis(c)

答案 1 :(得分:1)

命令行参数默认为字符串,即使它们是数字。如果您需要将其用作列表的索引,则需要将其转换为数字,可能使用int

您的情况甚至更奇怪,您使用sys.argv [0]作为索引访问列表。请记住,sys.argv[0]始终是当前执行脚本的名称,并且在所有情况下都是非数字,非整数。我相信无论你提到sys.argv[1]

,所有情况都是sys.argv[0]