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
相关产品推荐
相关产品推荐

