Python 为什么我要对另一个文件中的同一行进行回溯?索引器:列表索引超出范围
我很难理解,如果序列被切换,为什么这行代码在工作时会有回溯 代码行为: 1)Python 为什么我要对另一个文件中的同一行进行回溯?索引器:列表索引超出范围,python,python-3.x,Python,Python 3.x,我很难理解,如果序列被切换,为什么这行代码在工作时会有回溯 代码行为: 1) 如果单词[0]!=“From”或len(words)
如果单词[0]!=“From”或len(words)<1:
(第9行,左侧文件,提供回溯)
2) 如果len(单词)<1或单词[0]!=“From”:
(第10行,右侧文件,works)
我试着用“工作”行替换左边的那一行。所以我只是好奇,为什么需要在序列中有具体的内容。这是因为当你调用:
如果len(words)<1或words[0]!=“从”
表达式按其出现的顺序求值,首先是len(words)<1
然后是words[0]!=“来自”
。当第一个表达式被计算为true时,代码正在计算或
表达式,因此解释器不会计算第二个表达式,因为不管发生什么,都会输出true
当您调用if words[0]!=“From”或len(words)<1
解释器将计算表达式words[0]!=“From”
当单词为空列表时,您将收到索引错误,因为数组中不存在索引0
顺便说一下,如果不是单词或单词[0],您可以将表达式恢复为
!=“From”
在第一种情况下,您正在访问单词列表中的第一项(单词[0]),但如果列表为空,则索引超出范围,这在Python中会生成错误
在秒的情况下(工作的行),首先检查列表是否为空(少于1项)。在Python中,布尔“and”和“or”是短路运算符。这意味着如果“或”之前的条件为真,它将不会评估“或”之后的条件。因此,它不会尝试访问越界索引。最好发布实际代码。如果您这样做了,我们可以运行它并亲自查看错误。您得到的错误是什么?这将有助于: