Python: argv и IndexError

Я пытаюсь воспроизвести результаты исследовательской статьи, в которой они предоставили коды Python. Существует скрипт для загрузки их данных, и я пытаюсь запустить скрипт с терминала,

Python getData.py

это вызывает ошибку

Файл "getData.py", строка 127, в dataFile = sys.argv[1]+"/raw-comp.txt" IndexError: индекс списка вне допустимого диапазона

Связанная часть в коде Python находится здесь,

if __name__ == '__main__' :

    dataFile = sys.argv[1]+"/raw-comp.txt"
    # Read the data

Я не знаю, связано это или нет; но сценарий «getData.py» находится в папке «src», тогда как файл «raw-comp.txt» находится в папке «data».

Я проверяю это решение здесь, python: IndexError: индекс списка вне диапазона и он говорит, что argv хранит аргументы командной строки, и вам нужно передать аргументы перед ее вызовом. Я также проверил это; from sys import argv - какова функция script где скрипт и имя файла были присвоены argv. Но здесь, в этом коде, argv не был определен до фрагмента кода выше, кроме того, это первый раз, когда argv встречается в скрипте.

Я действительно понятия не имею, почему он не запустился, потому что он должен работать без каких-либо изменений, как они говорят. Спасибо уже.

Редактировать: они предоставили описание сценария ниже, они не упоминают никаких аргументов, которые должны быть переданы из терминала.

getData: a script to download and/or build the data files.

person patti_jane    schedule 26.03.2014    source источник
comment
Чрезвычайно связанно, ваша программа ожидает по крайней мере один аргумент sys.argv[1], а вы выполняете ее без него.   -  person Paulo Bu    schedule 27.03.2014
comment
но они не упоминают о каких-либо аргументах для передачи. тогда это должен быть путь к каталогу?   -  person patti_jane    schedule 27.03.2014
comment
Да, из кода видно, что это должен быть путь к каталогу, содержащему raw-comp.txt,   -  person PeterSW    schedule 27.03.2014
comment
они были очень злыми, потому что код должен быть задокументирован :). Да, этот код ожидает путь, скорее всего, путь к каталогу.   -  person Paulo Bu    schedule 27.03.2014
comment
спасибо за ответы, проблема с argv решена! Однако возникла еще одна ошибка, говорящая, что «количество пробелов должно быть четным». В любом случае, надеюсь, я разберусь.   -  person patti_jane    schedule 27.03.2014


Ответы (1)


Попробуйте запустить его как:

python getData.py ../data

Наличие sys.argv[1] означает, что программа не может быть запущена без передачи хотя бы одного аргумента командной строки.

Как указано в документации по Python, sys.argv – это список аргументов командной строки, первый запись sys.argv[0] является именем сценария. Исключение ÌndexError возникает, когда аргументы командной строки не передаются, поскольку код пытается получить доступ к несуществующей записи.

person PeterSW    schedule 26.03.2014
comment
Я думаю, вы должны включить небольшое объяснение. - person Paulo Bu; 27.03.2014