2010-08-03 4 views
0

Ce code, je travaille avec ce qui vient de la programmation pratique:process_file (sys.argv [1]) IndexError: liste des index hors de portée

import sys 

def process_file(filename): 
'''Open, read, and print a file.''' 

input_file = open(filename, "r") 
for line in input_file: 
    line = line.strip() 
    print line 
input_file.close() 
if __name__ == "__main__": 
    process_file(sys.argv[1]) 

Après l'importation de ce module en IDLE et passer un texte l'argument limer process_file(), je reçois cette erreur:

Traceback (most recent call last): 
    File "<pyshell#8>", line 1, in <module> 
    process_file("data.txt") 
    File "C:\Python26\read_file_2.py", line 14, in process_file 
    process_file(sys.argv[1]) 
IndexError: list index out of range 

Comment puis-je obtenir ce programme de travail sans recevoir cette erreur? Toute aide est appréciée.

+0

Est-ce 'sys.argv [0]' ou 'sys.argv [1]'? Tu n'es pas très cohérent. ;) Si c'est 1, je suppose qu'il n'y a pas de paramètre passé. – Bobby

+0

Tout d'abord, s'il vous plaît envoyez le code réel qui provoque l'erreur - notez que vous avez 'sys.argv [1]' dans votre code, mais 'sys.argv [0]' dans votre traceback. Deuxièmement, s'il vous plaît assurez-vous que votre indentation est correcte dans votre code posté - c'est encore plus important dans Python, où les espaces sont importants. –

+0

Mon mauvais, j'avais expérimenté avec changer le code à sys.argv [0] et ai copié le mauvais message d'erreur. l'a édité. – Timmay

Répondre

0

On dirait que vous avez le

if __name__ == "__main__": 
    process_file(sys.argv[1]) 

bloc au même niveau d'indentation que le reste de la définition process_file, il est donc en cours d'exécution lorsque vous appelez process_file d'un autre module. Je soupçonne que cela pourrait causer votre problème - indignez-le si le if est en ligne avec le def.

+0

Cela supprime l'erreur lorsque j'exécute ce programme à partir de la ligne de commande, mais ne fait rien pour le problème dans IDLE (dont je ne suis pas si inquiet). – Timmay

+0

Alors, quel est le problème dans IDLE? Si vous avez fait marche arrière, vous ne pouvez pas le toucher lorsque vous appelez. – Chowlett

+0

IDLE donne toujours l'erreur de plage de l'index de liste lorsque je passe le fichier .txt via process_file(). – Timmay

0

vous devez déplacer

if __name__ == "__main__": 
    process_file(sys.argv[1]) 

de la fonction process_file. Lors de l'importation dans IDLE, assurez-vous que process_file est disponible et transmettez-lui le nom du fichier.

Questions connexes