首页 > 解决方案 > 为什么“if”检查不能防止字符串中的 IndexError?

问题描述

在此处输入图像描述

这是“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

标签: pythonpython-3.xstringfunctionif-statement

解决方案


您正在使用“或”条件。在“或”条件下,它首先检查提到的第一条语句。它正在检查字符串的第一个和最后一个元素是否相同。如果第一个语句满足(仅当给出有效输入 - 非空字符串),它将进入 if 条件而不检查第二个语句。但是如果第一个语句失败(字符串的第一个和最后一个元素不相同),它会检查第二个语句。

但是,在这种情况下,第一条语句没有得到有效的输入,即它得到的是一个空字符串。由于输入无效(空字符串),它会抛出错误。它仅在给出有效输入的情况下检查语句是否为真。如果给出了无效的输入,那么它将停止执行并抛出错误。

您可以对代码稍作更改并获得所需的输出。

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(""))

请参阅以下快照以获取输出

在此处输入图像描述


推荐阅读