为什么我对在另一个文件上可用的同一行进行回溯? IndexError:列表索引超出范围

问题描述 投票:0回答:2

我很难理解为什么如果切换了序列,当这行代码起作用时为什么会有该行的回溯。

代码行是:1)if words[0] != "From" or len(words) < 1 :(第9行,左侧文件,提供回溯)

2)if len(words) < 1 or words[0] != "From" :(第10行,右文件,有效)

pic of the two files

我尝试用有效的“工作”行替换左侧的行。所以我很好奇为什么序列中需要具体说明。

python python-3.x
2个回答
0
投票

发生这种情况是因为当您致电:if len(words) < 1 or words[0] != "From"

将根据表达式的出现顺序对其求值,首先是len(words) < 1,然后是words[0] != "From"。当代码在评估第一个表达式为true时正在评估or表达式时,解释器将不会对第二个表达式求值,因为这无关紧要,它将输出true。

[当您调用if words[0] != "From" or len(words) < 1时,解释器将对表达式words[0] != "From"求值,因为这些单词是一个空列表,您将收到索引错误,因为数组中不存在索引0。

通过您可以将表情恢复到if not words or words[0] != "From"


0
投票

在第一种情况下,您正在访问单词列表中的第一项(words [0],但是如果列表为空,则索引超出范围,这会在Python中产生错误。

在秒数的情况下(起作用的行),您首先要检查列表是否为空(少于1个项目)。在Python中,布尔值“ and”和“ or”是短路运算符。这意味着,如果“或”之前的条件为真,则不会评估“或”之后的条件。因此,它不会尝试访问越界索引。

© www.soinside.com 2019 - 2024. All rights reserved.