#python #if-statement
#python #if-statement
Вопрос:
reject_numberList = ['1', '2', '3', '4', '5', '6']
resend_numberList = ['2', '3', '4', '5', '6', '7']
for i in range(6):
try:
print("Is",reject_numberList[i], "resend?")
if(reject_numberList[i] < resend_numberList[i] and resend_numberList[i] == reject_numberList[i 1]):
print(True)
else:
print(False)
except IndexError:
pass
Вот мой код. Есть несколько чисел, отклоненных и отклоненных. Но номер 6 не возвращает ‘False’. И вот результат:
Is 1 resend?
True
Is 2 resend?
True
Is 3 resend?
True
Is 4 resend?
True
Is 5 resend?
True
Is 6 resend?
Process finished with exit code 0
Что не так с номером 6?
Комментарии:
1. Почему вы храните числа в виде строк? Почему ваш обработчик исключений пуст?
2. Этот последний элемент сгенерировал ошибку IndexError (из-за
reject_numberList[i 1]
выражения), но вашеexcept
предложение скрыло это.3. Не подавляйте
IndexError
, и вы увидите.reject_numberList[i 1]
проблема.4. потому что
list index out of range
5. попробуйте / за исключением того, что исключения маски считаются плохой практикой кодирования (т. Е. Ваш пропуск в except ). Смотрите самый дьявольский антипаттерн Python . Проблема в том, что ошибки кода остаются незамеченными.
Ответ №1:
Вы перебираете созданные массивы с одинаковым количеством элементов.
Причиной проблемы является if
часть:
if(reject_numberList[i] < resend_numberList[i] and resend_numberList[i] == reject_numberList[i 1]):
Вы reject_numberList[i 1]
выйдете за пределы привязки.
tldr: ваше i
значение на последней итерации равно 6, и reject_numberList[i 1]
вы хотите получить 7-й элемент reject_numberList
, которого не существует
Ответ №2:
reject_numberList[i 1]
На последнем шаге выходит за пределы и вызывает IndexError
перехват, pass
поэтому исключение не возникает, и программа достигает своего конца.
Ответ №3:
Поскольку вы просматриваете список reject_numberList, вы получаете исключение — индекс выходит за пределы для 6 — после него в массиве нет элемента. Сначала проверьте, является ли ti < reject_numberList.size — 1 , если нет, верните false без проверки этого элемента.
Ответ №4:
Вы вызываете ошибку индекса с помощью этого кода: reject_numberList[i 1]
Эта проблема связана с тем фактом, что i заканчивается как 5. Следовательно, 6 будет индексом reject_numberList
.
Поскольку списки начинаются с индекса 0, список ['1','2','3','4','5','6']
не будет принимать индекс 6; 6 находится за пределами диапазона списка.
Представьте себе это:
['1','2','3','4','5','6']
# 0 1 2 3 4 5 <- There is no sixth position, since we started at 0.
Ответ №5:
у вас ошибка index out of range, потому что python начинает свой подсчет с 0…в массиве 6 элементов (не уверен, почему ваши числа хранятся как символы), но в python есть элементы 0, 1, 2, 3, 4, 5, 6. Чтобы избежать проблем, попробуйте
for i in range(len(rejectNumber_list))