python - 为什么“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
解决方案
您正在使用“或”条件。在“或”条件下,它首先检查提到的第一条语句。它正在检查字符串的第一个和最后一个元素是否相同。如果第一个语句满足(仅当给出有效输入 - 非空字符串),它将进入 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(""))
请参阅以下快照以获取输出
推荐阅读
- python - 返回熊猫数据框中的单元格差异
- wordpress - 重定向出错 htaccess
- jpa - 事务结束期间的 SQLException 未按预期回滚
- javascript - 检查是否针对 2 个提交按钮选择单选按钮
- java - 没有错误,但应用程序仍然在 android studio 中关闭
- java - 如何让 Eclipse 代码格式化程序开始包装赋值语句 = 运算符
- python - 将字符串拆分并在python中有序保存到列表中
- javascript - Is Redux.js a sufficient way to separate data from view in a React.js/Node.js hybrid application?
- java - MVP中的Android NFC阅读器-onNewIntent未触发
- algorithm - Algorithms to find difference/similarity in a sequence of images/frames