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

如何修复Python读取CSV时的'TypeError: NoneType object is not subscriptable'错误?

错误原因与修复方案

错误解释

TypeError: 'NoneType' object is not subscriptable 表示你尝试对一个None类型的对象使用下标([])操作。核心问题是混淆了csv.DictReader和csv.reader的用法:

  • csv.DictReader返回的每一行row是字典结构,键是CSV的表头字符串(比如'Name'),只能通过表头名取值;
  • 但你却用整数索引(从headers.index(col)得到的列位置)去访问字典,字典不存在整数类型的键,最终触发该错误。

修复方法

方法1:改用csv.reader(通过索引取值)

如果想保留按索引提取列的逻辑,改用普通csv.reader,它返回的每一行是列表,支持整数索引:

import csv

def extract_columns(filename, cols):
    with open(filename, 'r') as f:
        reader = csv.reader(f)
        headers = next(reader)  # 读取第一行作为表头
        indices = [headers.index(col) for col in cols]
        data = []
        for row in reader:
            data.append([row[i] for i in indices])
        return data

data = extract_columns('data.csv', ['Name', 'Age'])
print(data)

方法2:继续使用csv.DictReader(通过表头名取值)

这是更贴合DictReader设计的用法,直接通过表头字符串作为字典键取值,逻辑更直观:

import csv

def extract_columns(filename, cols):
    with open(filename, 'r') as f:
        reader = csv.DictReader(f)
        data = []
        for row in reader:
            data.append([row[col] for col in cols])
        return data

data = extract_columns('data.csv', ['Name', 'Age'])
print(data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:03:10