【问题标题】:fileku.write(sys.argv[i+3]+'\n') IndexError: list index out of rangefileku.write(sys.argv[i+3]+'\n') IndexError: list index out of range
【发布时间】:2017-07-11 21:40:39
【问题描述】:

我还是 python 新手,我想创建一个可以根据命令行参数读取/写入/附加文本文件的程序。

这是我的代码:

导入系统

def prosesfile():
        fileku=open(sys.argv[1],sys.argv[2])
        if(sys.argv[2] == 'w'):
                for i in range(5):
                        fileku.write(sys.argv[i+3]+'\n')
                print('proses tulis file selesai.')
        elif(sys.argv[2] == 'r'):
                for i in fileku:
                        print(i)
                print('proses baca selesai.')
        elif(sys.argv[2] == 'a'):
                for i in range(5):
                        fileku.write(sys.argv[i+3]+'\n')
                print('proses append file selesai.')

prosesfile()

然后我尝试执行:

python3 program.py textfile.txt w word1 word2

然后我得到了一个错误:

File "program.py", line 14, in prosesfile
fileku.write(sys.argv[i+3]+'\n')

IndexError: 列表索引超出范围

会发生什么?我的代码有什么问题吗? 谢谢:)

【问题讨论】:

  • 您在调用脚本时没有提供额外的 5 个参数。

标签: python python-2.7 python-3.x argv sys


【解决方案1】:

在你的 for 循环中:for i in range(5): 变量 i 被赋值为 0、1、2、3、4;所以当你尝试访问sys.argv[i+3]i+3是3,4,5,6,7,但sys.argv中只有4个元素。

【讨论】:

  • 所以如果我更改为 for i in range(10):,会发生什么?我试过了还是报错?? :|
【解决方案2】:

如果你用

调用你的程序
python3 program.py textfile.txt w word1 word2

您总共将有 5 个命令行参数。循环:

for i in range(5):
    fileku.write(sys.argv[i+3]+'\n')

将尝试访问除此之外的元素。

改成这样:

for arg in sys.argv[3:]:
    fileku.write(arg+'\n')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 2018-02-08
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多