2017-07-11 7 views
-2

Je suis encore nouveau en python, je veux créer un programme qui peut lire/écrire/ajouter du texte fichier en fonction de l'argument de la ligne de commande.fileku.write (sys.argv [i + 3] + ' n') IndexError: index de liste hors plage

voici mon code:

import 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() 

alors j'ai essayé d'exécuter:

python3 program.py textfile.txt w word1 word2 

mais je suis une erreur:

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

IndexError : liste index sur plage

Que se passe-t-il? Y at-il quelque chose qui ne va pas avec mon code? merci :)

+0

Vous n'avez pas fourni ces 5 arguments supplémentaires lors de l'appel de votre script. – zwer

Répondre

0

Si vous appelez votre programme avec

python3 program.py textfile.txt w word1 word2 

vous aurez un total de 5 arguments de ligne de commande. La boucle:

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

tente d'accéder aux éléments au-delà de cela.

Changement à ceci:

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

whoa merci! cela a résolu mon problème. merci :) – Cakra1337

1

Dans votre boucle: for i in range(5): variables i est attribué des valeurs 0, 1,2,3,4; Donc quand vous essayez d'accéder sys.argv[i+3]i+3 est 3,4,5,6,7, mais vous avez seulement 4 éléments dans sys.argv.

+0

donc si je change pour i dans la gamme (10) :, qu'est-ce qui se passe? J'ai essayé mais encore erreur? : | – Cakra1337