我有此代码:
def main():
if (len(sys.argv) > 2) :
P=list()
f= open('Trace.txt' , 'w+')
Seed = int(sys.argv[1])
for i in range(2, len(sys.argv)):
P[i-2] = int(sys.argv[i])
for j in range(0, len(sys.argv)-1) :
Probability=P[j]
for Iteration in (K*j, K*(j+1)):
Instruction= generateInstruction(Seed, Probability)
f.write(Instruction)
f.close()
else:
print('Params Error')
if __name__ == "__main__":
main()
这个想法是我正在通过命令行传递一些参数。第一个是种子,其余的我想将它们包含在列表中,稍后我将对其进行解析并根据该参数进行处理。 我不断收到此错误:
P[i-2] = int(sys.argv[i])
IndexError: list assignment index out of range
我在做什么错
PS:K,generateSegment()在代码的前一部分中定义。
答案 0 :(得分:2)
您看到的错误与list
被无效索引建立索引有关。
具体来说,问题在于在该行中调用P
时是一个空列表,因此P[0]
确实不可访问。也许您想要的实际上是将元素添加到列表中,这可以通过例如替换来实现:
P[i-2] = int(sys.argv[i])
具有:
P.append(int(sys.argv[i]))
还要注意,通过使用标准模块argparse
而不是手动解析sys.argv
,在Python中通常可以更有效地实现参数解析。
答案 1 :(得分:0)
您似乎正在引用一个不存在的列表项。
我已经有一段时间没有使用Python了,但是我很确定,如果要将值添加到列表末尾,可以使用someList.append(foo)
答案 2 :(得分:0)
问题是您正在为一个尚不存在的索引分配一个值。 您需要替换
P[i-2] = int(sys.argv[I])
使用
P.append(int(sys.argv[i]))
此外,len(sys.argv)
将返回sys.argv
中的项目数,但是索引从0开始,因此您需要更改:
for i in range(2, len(sys.argv)):
使用
for i in range(2, len(sys.argv)-1):
否则您将遇到list index out of range
错误