2010-08-03 2 views
0

Это код, я работаю с этим приходит из практического программирования:process_file (sys.argv [1]) IndexError: Индекс списка вне диапазона

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]) 

После импорта этого модуля в IDLE и передать текст файл аргумент через process_file(), я получаю эту ошибку:

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 

Как я могу получить эту программу, чтобы работать, не получая эту ошибку? Любая помощь приветствуется.

+0

Это 'sys.argv [0]' или 'sys.argv [1]'? Вы не очень согласитесь. ;) Это если 1, я бы догадался, что не передано никакого параметра. – Bobby

+0

Прежде всего, разместите фактический код, вызывающий ошибку, - обратите внимание, что в вашем коде есть 'sys.argv [1]', но 'sys.argv [0]' в вашей трассировке. Во-вторых, убедитесь, что ваш отступы верны в вашем опубликованном коде - это еще более важно в Python, где пробелы значительны. –

+0

Неплохо, я экспериментировал с изменением кода на sys.argv [0] и скопировал неправильное сообщение об ошибке. отредактировал его. – Timmay

ответ

0

Похоже, что у вас есть блок

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

на тот же уровень отступа, как остальная часть process_file определения, так что это время запуска при вызове process_file из другого модуля. Я подозреваю, что это может вызвать вашу проблему - отменить его, так что if соответствует def.

+0

Это удаляет ошибку, когда я запускаю эту программу из командной строки, но ничего не делает для проблемы в IDLE (что меня не беспокоит). – Timmay

+0

Так что же _is_ проблема в IDLE? Если вы отступите от этого, вы не сможете ударить его, когда звоните. – Chowlett

+0

IDLE по-прежнему выдаёт индекс индекса за пределами диапазона при передаче файла .txt через process_file(). – Timmay

0

вы должны двигаться

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

из функции process_file. При импорте в IDLE убедитесь, что доступно process_file и передайте ему имя файла.

Смежные вопросы