2017-07-11 66 views
-2

我仍然是新的python,我想创建一个程序,可以读/写/追加文本文件取决于命令行参数。fileku.write(sys.argv [i + 3] +' n')IndexError:列表索引超出范围

这里是我的代码:

进口SYS

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 :列出索引范围

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

+0

您在调用脚本时未提供额外的5个参数。 – zwer

回答

0

如果调用

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') 
+0

哇,谢谢!它解决了我的问题。谢谢:) – Cakra1337

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个元素。

+0

所以如果我改变为我在范围(10):,会发生什么?我试过,但仍然错误? :| – Cakra1337

相关问题