Python 3.8: IndexError при использовании append () - PullRequest
0 голосов
/ 19 февраля 2020

Я сделал небольшую «консоль», которая разбивает команду на split(). Я отделяю «команду» (первое «слово» от input()) от «аргументов», следующих за первым словом. Вот код, который генерирует ошибку:

cmdCompl = input(prompt).strip().split()
cmdRaw = cmdCompl[0]
args = addArgsToList(cmdCompl)

addArgsToList() функция:

def addArgsToList(lst=[]):
    newList = []
    for i in range(len(lst)):
        newList.append(lst[i+1])
    return newList

Я пытаюсь добавить каждое слово после cmdRaw в список с именем args, который возвращается addArgsToList(). Но вместо этого я получаю:

Welcome to the test console!

Type help or ? for a list of commands

testconsole >>> help
Traceback (most recent call last):
  File "testconsole.py", line 25, in <module>
    args = addArgsToList(cmdCompl)
  File "testconsole.py", line 15, in addArgsToList
    newList.append(lst[i+1])
IndexError: list index out of range

Я не могу понять, почему я получаю IndexError, потому что, насколько я знаю, newList может быть динамически распределен.

Любая помощь

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Вы должны сделать так:

, если вы будете sh, чтобы избежать добавления первого элемента

def addArgsToList(lst=[]):
    newList = []
    for i in range(1,len(lst)):
        newList.append(lst[i])
    return newList

, если вы просто пытаетесь скопировать элементы в новом списке просто сделать это:

newList = lst[1:].copy()
1 голос
/ 19 февраля 2020

Когда вы делаете:

for i in range(len(lst)):
    newList.append(lst[i+1])

Последняя итерация пытается получить доступ к lst в len(lst), который выходит за пределы.

...