Python解析黑名单数据触发IndexError: list index out of range错误排查
解决黑名单解析的IndexError问题
问题原因
报错是因为存在空行或者仅含空白字符的行:这类行既不是注释(不startswith('#')),但entry.split()后会得到空列表,此时len(hostname)为0,进入else分支后取hostname[1]自然触发索引越界。原逻辑仅依赖拆分后的长度判断,没考虑这类异常情况。
修正后的代码
blocklist_data = unpack_blocklist_data() hostnames = [] for entry in blocklist_data: # 先去除首尾空白,处理空行或前后空格的情况 cleaned_entry = entry.strip() # 跳过注释行和空行 if cleaned_entry.startswith('#') or not cleaned_entry: continue # 仅匹配"0.0.0.0 site.domain.org"格式的条目,拆分取域名 if cleaned_entry.startswith('0.0.0.0 '): # 只拆分一次,避免多余空格干扰 hostname = cleaned_entry.split(maxsplit=1)[1] hostnames.append(hostname) else: # 其他情况直接使用清理后的域名 hostnames.append(cleaned_entry) return hostnames
关键改动说明
- 清理空白:用
strip()处理每行首尾的空格、换行符,过滤空行干扰。 - 精准格式匹配:不再依赖拆分后的长度判断,直接检查是否以
0.0.0.0(带空格)开头,只对目标格式做拆分操作。 - 安全拆分:
split(maxsplit=1)仅拆分一次,即使域名后有多余空格也不会影响结果。 - 过滤空行:新增空行判断,彻底避免空列表导致的索引错误。
内容的提问来源于stack exchange,提问作者uncrayon
相关产品推荐
相关产品推荐

