Python程序编译失败:Index value out of range(索引值越界)问题求助
解决Python索引越界错误:处理电影评分文本
我来帮你搞定这个"Index value out of range"的问题!
问题根源分析
你的代码里用split(".")来分割每行内容,这是错误的核心原因:
- 你的文本文件中,前三个评分是带小数点的(比如
6.0、5.1),但最后一个评分是整数7。当处理这一行时,split(".")只会返回一个元素的列表(因为没有小数点可以分割),这时候你尝试访问temp[1]自然就会触发索引越界错误。 - 另外,你用
lines[i][:-1]手动去除换行符也有隐患:如果文件最后一行没有换行符,这会意外删掉最后一个字符(比如把7变成空),进一步引发问题。
修复后的代码
我们需要调整分割逻辑,精准拆分电影名称和评分,不管评分是整数还是小数都能正确处理:
def read_ratings_data(f): movie_ratings_dict = {} with open(f, "r") as file: # 逐行读取文件,自动处理换行符 for line in file: # 去除每行首尾的空白字符(包括换行符、空格) cleaned_line = line.strip() if not cleaned_line: continue # 跳过空行,避免处理无效内容 # 按": "(冒号+空格)分割,精准拆分电影名和评分字符串 movie_part, rating_str = cleaned_line.split(": ") # 将评分字符串转换为float类型(整数会自动转为xx.0) rating = float(rating_str) # 更新字典:如果电影名不存在则创建新列表,否则追加评分 if movie_part not in movie_ratings_dict: movie_ratings_dict[movie_part] = [] movie_ratings_dict[movie_part].append(rating) return movie_ratings_dict # 调用测试 print(read_ratings_data("movie_ratings.txt"))
关键改进点
- 更高效的读取方式:用
for line in file逐行读取,不需要先把所有行存入列表,节省内存同时避免手动处理换行符。 - 可靠的内容清理:
line.strip()统一处理换行符和首尾空格,还能跳过空行。 - 精准分割逻辑:用
:作为分割符,完全匹配文本的格式(电影名: 评分),不管评分是整数还是小数都能正确提取。 - 安全的类型转换:
float(rating_str)可以把7和5.1都正确转换为浮点型,不会出错。
运行结果
处理你提供的文本文件后,会得到正确的字典:
{'The Lion King (2019)': [6.0, 7.5, 5.1], 'Titanic (1997)': [7.0]}
内容的提问来源于stack exchange,提问作者sandwhichking8934
相关产品推荐
相关产品推荐

