len()函数未返回0致守护模式失效,触发索引越界错误求助
问题分析与解决
问题根源
你遇到的问题核心是:空行经过line.rstrip()处理后变成空字符串,调用split(',')时,Python会返回一个包含空字符串的列表[''],所以len(wds)等于1,导致你写的守护条件if len(wds) < 1: continue根本触发不了,代码继续执行到wds[5]时,因为列表长度只有1,自然就报索引越界错误。
修复方案
有两种简单的修复方式:
方式1:直接跳过空行
直接判断处理后的line是否为空,这是最直观的解决办法,你之前注释掉的代码其实是正确的:
han = open('file.txt') for line in han: line = line.rstrip() # 先跳过空行 if line == '': continue wds = line.split(',') # 再加一层守护,确保列表长度足够访问索引5 if len(wds) < 6: continue if wds[5] != 'random string': continue print(wds[1])
方式2:针对split后的列表做判断
既然空行split后得到的是[''],可以直接判断列表第一个元素是否为空,同时确保列表长度足够访问索引5:
han = open('file.txt') for line in han: line = line.rstrip() wds = line.split(',') # 空行split后是[''],所以判断第一个元素是否为空,同时确保长度够访问索引5 if not wds[0] or len(wds) < 6: continue if wds[5] != 'random string': continue print(wds[1])
补充说明
在Python中,''.split(',')的结果是['']而不是空列表,这是语言的默认行为——即使没有可分割的内容,split也会返回至少一个元素的列表。你在shell里测试空列表的len()确实是0,但那和split返回的单元素空字符串列表是两回事。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

