You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 14:04:07