如何修复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
相关产品推荐
相关产品推荐

