Это хорошая идея, чтобы сообщить индекс, который вызывает IndexOutOfBound, как это? - PullRequest
0 голосов
/ 23 июня 2018

Индекс для последовательности, такой как list в Python, Array в Java или std::vector<int> в C ++, может выйти за пределы диапазона с учетом отрицательного индекса.Когда это происходит и язык среды выполнения выбирает их обнаружение, они генерируют исключение с индексом, вызывающим ошибки, или без него.В моей ситуации я пишу некоторый код-обертку, чтобы использовать индекс для доступа к списку, примерно так:

function! MyGetItem(list, index)
  return list[index]
endfunction

Я хочу обнаружить IndexError, и у меня есть два способа:

  • используйте try-catch вокруг list[index], чтобы пересечь и, вероятно, украсить встроенную ошибку.
  • обнаружите ошибку самостоятельно и защитите list[index].

Проблема в том, что встроенная ошибка не работает, когда индекс отрицательный.Например, если я использую list[-2], где len(list) == 1, ошибка будет index out of range: -1, что на самом деле index + len(list).Пытаясь понять, является ли общепринятой практикой указание индекса как такового, я попробовал один и тот же пример нескольких языков.В тех, кто не поддерживает отрицательный индекс, таких как java и C ++, индекс сообщается как он.Однако в Python об индексе не сообщается:

>>> s[-1]

IndexError: string index out of range

>>> [][0]

IndexError: list index out of range

Это заставляет меня задуматься, выбирает ли Python игнорирование плохого индекса из-за какого-то принципа разработки программного обеспечения.В какой ситуации мне следует следовать?

...