Почему я получаю IndexError в этом маленьком коде Python?

Вот код, помогите исправить.

#!/usr/bin/env python

import sys

def print5times(line_to_print):
        for count in range(0,5) :
                print line_to_print

print5times(sys.argv[1])

при запуске этого кода я получаю эту ошибку:

 Traceback (most recent call last):
   File "./func.py", line 9, in <module>
     print5times(sys.argv[1])
 IndexError: list index out of range

person faust_    schedule 03.12.2016    source источник
comment
Это шутка, я так понимаю? :)   -  person favoretti    schedule 03.12.2016
comment
Вы понимаете, что такое sys.argv?   -  person OneCricketeer    schedule 03.12.2016
comment
Кроме того, print5times — это странное имя для функции, которая выполняет цикл 9 раз.   -  person OneCricketeer    schedule 03.12.2016
comment
Я только начинаю заниматься программированием.   -  person faust_    schedule 03.12.2016
comment
В Python индексы списка начинаются с 0, что означает, что первый элемент — list[0], второй — list[1] и т. д.   -  person qxz    schedule 03.12.2016
comment
Это нормально, но неясно, следуете ли вы каким-либо конкретным руководствам, но если да, это должно объяснить это. В противном случае не рекомендуется просто запускать случайный код, который вы найдете, не читая и не понимая документацию для каждой части, которую вы не понимаете. И если вы только начали, рекомендуется использовать Python3   -  person OneCricketeer    schedule 03.12.2016
comment
@qxz Первым аргументом здесь будет имя скрипта.   -  person Pierre Barre    schedule 03.12.2016
comment
@user312016 user312016 Я делал (слегка [не]связанный) комментарий в целом о массивах, а не конкретно sys.argv.   -  person qxz    schedule 03.12.2016


Ответы (2)


sys.argv[1] Дает вам второй аргумент, переданный в командной строке.

IndexError возникает из-за того, что вы не передаете достаточно аргументов в свой сценарий.

Даже если вы сделаете это правильно, с вашим текущим фрагментом вы напечатаете аргумент 9 раз, а не только 5, как следует из названия вашей функции.

person Pierre Barre    schedule 03.12.2016

Взгляните на значение sys.argv[1] в сценарии

Теперь в вашем коде Python вы можете использовать этот список строк в качестве входных данных для вашей программы. Поскольку списки индексируются целыми числами, начинающимися с нуля, вы можете получить отдельные элементы, используя синтаксис list[0]. Например, чтобы получить имя скрипта:

script_name = sys.argv[0] # this will always work.

Хотя это интересно знать, вам редко нужно знать имя вашего скрипта. Чтобы получить первый аргумент после сценария для имени файла, вы можете сделать следующее:

filename = sys.argv[1]

Это очень распространенное использование, но учтите, что если аргумент не указан, произойдет ошибка IndexError.

person Gerrit Verhaar    schedule 03.12.2016