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

Python函数返回元组取元素报错:TypeError: 'NoneType'不可下标

问题分析与解决方案

问题根源

你的coords()函数只有在三个if条件全部满足时才会返回坐标元组,只要有一个条件不满足,函数就会默认返回None。

当执行print(coords())时,可能刚好某次调用满足所有条件,输出了正常的坐标元组,但实际上存在大量返回None的调用(只是你没留意到);而执行print(coords()[0])时,只要有一次调用返回None,尝试对None做下标访问就会触发TypeError: 'NoneType' object is not subscriptable错误。之前代码偶尔正常是因为刚好那几次调用满足所有条件,但后续调用不满足就会崩溃。


解决方案

方案1:给函数添加默认返回值

修改coords()函数,在所有条件不满足时返回一个默认坐标元组(可根据需求调整默认值):

def coords():
    rl = detection.xyxy[0].tolist()

    # 从检测框像素位置计算x、y坐标
    if len(rl) > 0:
        if rl[0][4] > 0.7:
            if rl[0][5] == 0:             
                width = float(rl[0][2]) - float(rl[0][0])
                height = float(rl[0][3]) - float(rl[0][1])

                x = float(rl[0][2]) - (width / 2)
                y = float(rl[0][3]) - (height / 2) + 15

                return int(x), int(y)
    # 添加默认返回值,避免返回None
    return (0, 0)

方案2:调用时先判断返回值有效性

在main()函数中,先获取coords()的返回结果,确认不是None后再访问下标:

def main():
    while True:
        pos = coords()
        print(pos)
        if pos is not None:
            print(pos[0])
        else:
            # 可添加无有效检测时的自定义逻辑
            print("未检测到符合条件的目标")

内容的提问来源于stack exchange,提问作者female-nectar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:24:58