Почему проверка «если» не предотвращает ошибку IndexError в строке? - PullRequest
0 голосов
/ 07 августа 2020

введите здесь описание изображения

Это «IndexError: индекс строки вне допустимого диапазона»

Под кодом:

def first_and_last(message):
    if message[0] == message[-1] or message is None:
        return True
    return False

print(first_and_last("else"))
print(first_and_last("tree"))
print(first_and_last(""))

Ниже вывода вышеуказанного кода

True
False
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-9-026229c3b5af> in <module>
      6 print(first_and_last("else"))
      7 print(first_and_last("tree"))
----> 8 print(first_and_last(""))

<ipython-input-9-026229c3b5af> in first_and_last(message)
      1 def first_and_last(message):
----> 2     if message[0] == message[-1] or message is None:
      3         return True
      4     return False
      5 

IndexError: string index out of range

1 Ответ

0 голосов
/ 07 августа 2020

Вы используете условие «или». В условии «или» он сначала проверяет первый упомянутый оператор. Он проверяет, совпадают ли 1-й и последний элементы строки. Если 1-й оператор удовлетворяет (только если задан действительный ввод - непустая строка), он войдет в условие if без проверки 2-го оператора. Но если 1-й оператор не работает (1-й и последний элементы строки не совпадают), он затем проверяет наличие 2-го оператора.

Но в этом случае 1-й оператор не получает действительный ввод ie получает пустую строку. Из-за недопустимого ввода (пустая строка) возникает ошибка. Он проверяет, верны ли утверждения или нет, только если дан допустимый ввод. Если введен недопустимый ввод, он остановит выполнение и выдаст ошибку.

Вы можете внести небольшие изменения в код и получить желаемый результат.

def first_and_last(message):
    if message:
        if message[0] == message[-1]:
            return True
        else:
            return False
    return False

print(first_and_last("else"))
print(first_and_last("tree"))
print(first_and_last(""))

См. Снимок ниже для вывода

введите описание изображения здесь

...