Python读取文本文件行首单词触发IndexError报错问题咨询
报错原因与修复方案
根本原因
IndexError: list index out of range是因为你遍历到了空行/全空白行:
- 你碰到的“匹配到首条符合要求的内容后才报错”,是因为符合要求的行后面紧跟着空行/全空白行,遍历到那行的时候才触发了越界
- 文本中的空行在执行
line.strip()后会得到空字符串"" - 空字符串调用
split()返回的是空列表[],没有索引为0的元素,直接访问就触发越界错误 line.startswith("From")不会报错的原因是该方法直接对字符串做前缀判断,空字符串调用只会返回False,不存在越界问题
修复方案
方案1:保留split判断逻辑,先加非空校验
在访问words[0]之前先判断列表是否为空:
file_name = input("Enter file name: ") try: fhandle = open(f"./src/{file_name}", "r") except: print("file open err") quit() for line in fhandle: line = line.strip() words = line.split() # 增加列表非空判断,避免空列表访问索引 if words and words[0] == "From": print(line) if line.startswith("From"): print(line) fhandle.close()
方案2:直接使用startswith方法(更推荐)
str.startswith()是Python专门用来判断字符串前缀的内置方法,不需要额外拆分字符串为列表,性能更好,代码也更简洁,不需要额外处理空行异常。
内容的提问来源于stack exchange,提问作者Vikram Negi
相关产品推荐
相关产品推荐

