У меня был список
a = [1, 2, 3]
когда я сделал
a.insert(100, 100)
[1, 2, 3, 100]
поскольку список изначально имел размер 4, и я пытался вставить значение в индекс 100, он вел себя как append вместо того, чтобы бросать какие-либо ошибки, поскольку я пытался вставить индекс, который даже не существовал.
Если он не бросает
исключениеIndexError: индекс назначения списка вне диапазона
когда оно выбрасывается, когда Я пытаюсь сделать
a[100] = 100
Вопрос: 1. Любая идея Почему он был разработан, чтобы молча обращаться с этим, а не информировать пользователя об исключении?
Личное мнение:
Давайте посмотрим, как ведут себя другие языки в такой ситуации:
Ruby:
> a = [1, 2]
> a[100] = 100
> a
=> [1, 2, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 100]
Как рубины справляются, это довольно ясно и звучит, по крайней мере, для меня.
Java:
В java метод .add(индекс, значение), если применяется с индексом, который выходит за пределы диапазона (например, в arraylist, связанный список) java.lang.IndexOutOfBoundsException.
Таким образом, я чувствовал, что либо он должен генерировать исключение (как java), либо вставлять нуль в диапазон между ними (поскольку рубин обрабатывает его). Но бесшумный способ обработки в python просто раскачивается.
ОБНОВЛЕНИЕ (16 сентября 2014 г. IST 8:30):
Как предложил один из респондентов, я разместил этот вопрос в python-dev, и я получил ответ. Это можно увидеть в этом списке рассылки python dev. Если вы обнаружите, что ссылка на нить изменилась, вы можете найти ответ, выполнив google search для названия вопроса, добавленного в начале с помощью python DEV.