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

实现二维数组__getitem__方法触发TypeError,求排查指导

问题排查与解决思路

错误原因

当执行my_array[1][0]时,Python会分两步执行:

  1. 先调用my_array.__getitem__(1),此时传入的item是整数1
  2. 你的代码进入else分支,尝试执行x, y = item,但整数是不可迭代对象,无法解包成两个变量,因此触发TypeError

你的代码只处理了两种场景:

  • 数组为一维(shape[0]==1)时,直接返回一维数组的索引结果
  • 期望item是一个可迭代对象(比如元组(x,y))来直接定位二维元素
    但完全没考虑连续索引的情况——也就是第一次索引返回行对象,第二次索引再从行里取元素。

解决思路

需要修改__getitem__,让它能处理两种索引输入:

  1. 当输入是整数时:返回对应行的一维数组实例(确保这个实例也实现了__getitem__,支持后续的索引操作)
  2. 当输入是二元元组时:直接返回对应位置的元素

修改后的示例代码:

def __getitem__(self, item):
    # 处理连续索引的情况:先取行
    if isinstance(item, int):
        # 假设你有对应的一维数组类,比如My1DArray,传入该行的数值
        return My1DArray(self.twoDim[item])
    # 处理直接定位元素的情况:(x,y)元组索引
    elif isinstance(item, tuple) and len(item) == 2:
        x, y = item
        return self.twoDim[x][y]
    # 处理非法索引
    else:
        raise IndexError("索引格式错误:使用整数获取行,或使用(x,y)元组获取元素")

补充说明

  • 如果没有单独的一维数组类,也可以返回一个列表,但这样会丢失自定义数组类的特性(比如你实现的其他方法),更推荐返回自定义的一维实例
  • 原代码中shape[0]==1的判断可以整合进上述逻辑:当数组是一维时,整数索引直接返回元素,或者返回长度为1的行对象,取决于你期望的行为(比如支持my_array[0]和my_array[(0,0)]两种方式获取元素)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:35:30