Оператор If Else не возвращает оператор Else

#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))