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

Python:检查CSV二维数组元素时出现'int'对象不可下标报错

解决CSV读取时的TypeError: 'int' object is not subscriptable问题

让我来帮你拆解并解决这个问题,你遇到的错误根源出在数组初始化、循环逻辑以及CSV读取的细节上,咱们一步步来理清楚:

错误原因分析

  1. 数组初始化的致命问题
    你用arr = range(50)创建了一个包含整数的序列(Python3里是range对象,Python2里是整数列表)。当你的CSV文件行数少于50行时,arr中未被覆盖的元素依然是原始整数。比如CSV只有10行,那arr[10]到arr[49]都是整数,循环到这些位置时,arr[i][1]就相当于对整数做下标访问,这必然触发TypeError。

  2. 错误覆盖内置函数
    你写了len = len(arr),这会把Python内置的len()函数覆盖成一个整数,后续如果再想使用len()函数就会出问题,这是个需要避免的编程习惯。

  3. CSV读取模式与空值判断错误
    在Python3中,csv.reader要求文件以文本模式打开(用"r"或"rt"),而不是你用的二进制模式"rb";另外,CSV中的空单元格会被解析为空字符串'',而非None,所以你的arr[i][1] is None条件根本检测不到空值。

修正后的代码

下面是调整后的代码,解决了所有问题,同时更健壮:

import csv

# 用空列表动态存储行数据,避免固定长度带来的冗余元素问题
arr = []

# 使用with语句自动管理文件生命周期,无需手动关闭
with open("matrix1.csv", "r", newline="") as f:
    matrix = csv.reader(f)
    # 直接遍历csv.reader对象,将每一行添加到arr中
    for row in matrix:
        arr.append(row)

# 遍历所有行,检查第2列(索引为1)是否为空
for row_num, row in enumerate(arr, start=1):
    # 先确保该行有至少2个元素,避免索引越界报错
    if len(row) >= 2:
        # 用strip()处理可能的空格,确保真正的空值被检测到
        if row[1].strip() == '':
            print(f"第{row_num}行的第2列是空的(输入错误排查)")
    else:
        print(f"第{row_num}行的元素不足2个,无法检查第2列")

关键修正点说明

  • 改用空列表arr = []动态添加行,彻底避免了整数元素残留的问题
  • 使用with语句打开文件,自动处理文件关闭,代码更安全简洁
  • 文本模式打开文件,符合Python3中csv.reader的要求
  • 增加行长度检查,避免因某行元素不足导致的索引越界错误
  • 用row[1].strip() == ''判断空值,能覆盖单元格是空格的情况,更准确
  • 用enumerate(arr, start=1)直接获取从1开始的行号,输出信息更直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:29:36