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

如何从test1.log提取length字段值?解决TypeError问题

解决TypeError: string indices must be integers的问题

这个问题我熟!咱们先来搞清楚报错的原因,再一步步解决:

为什么会报错?

你从文件里读取的每一行line是字符串类型,而不是你以为的字典。字符串只能用整数下标(比如line[0]取第一个字符)来访问,直接用line['length']这种键索引自然会抛出类型错误。

你的test1.log里的内容虽然看起来像字典,但本质是一段文本字符串,必须先把它转换成Python真正的字典对象,才能用键来取值。

正确的解决方案

我们可以用Python的ast.literal_eval()方法(比eval()安全得多,不会执行恶意代码)把字符串格式的字典转换成真实的字典。同时推荐用with语句来操作文件,它会自动帮你关闭文件,避免资源泄漏。

修改后的代码如下:

import ast

def validate_file(f):
    with open(f, 'r') as fname:
        # 读取文件全部内容,同时去掉首尾可能的空白/换行符
        content = fname.read().strip()
        # 将字符串解析为合法的Python字典
        data_dict = ast.literal_eval(content)
        # 现在就可以正常提取length字段的值了
        print(data_dict['length'])

validate_file("test1.log")

为什么不用eval()?

虽然eval(content)也能把字符串转成字典,但eval()会执行字符串里的任意代码,如果文件内容被篡改(比如包含恶意代码),会带来安全风险。而ast.literal_eval()只会解析Python的字面量类型(字典、列表、字符串、数字等),是更安全的选择。

内容的提问来源于stack exchange,提问作者Rads

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:16:15