我有两个列表,一个包含4个元素,另一个包含4(满足特定条件时为4)。 我正在编写一个用于相交矩形的函数。 每个列表必须包含4个元素。 (列表为humanRegion_bbs,dominants_bbs)。我试过下面的代码,但是domings_bbs没有必需的4个坐标,因此出现此错误。
def setBelongings(self,image,humanRegion_bbs, belongings_bbs):
x_left = max(humanRegion_bbs[0],belongings_bbs[0])
y_top = max(humanRegion_bbs[1],belongings_bbs[1])
x_right = min(humanRegion_bbs[2],belongings_bbs[2])
y_bottom = min(humanRegion_bbs[3],belongings_bbs[3])
现在,当我调用此函数(此处仅提及函数的代码段)时,会产生以下错误,我已经知道为什么会发生。 当我添加if条件以检查列表是否为空时,它给出了ValueError。 如果您能告诉我如何解决此问题,我们将不胜感激。
答案 0 :(得分:1)
如果列表中没有足够的元素,那么您将无法访问它们。
您可以做的是添加更多有意义的错误检查。例如。您可以使用assert
检查列表的有效性:
assert len(humanRegion_bbs) == 4
assert len(belongings_bbs) == 4
或
if len(humanRegions_bbs) != 4 or len(belongings_bbs) != 4:
raise ValueError('length mismatch: {}, {}'
.format(len(humanRegions_bbs), len(belongings_bbs)))
这些东西会为您提供可解释的错误消息。
我还建议通过打印数组或检查程序是否出现异常行为,通过其他方式检查它们,以检查实际传递给函数的内容。然后,您可以找到问题的根源。
除此之外,您还可以使用更紧凑的方式编写函数:
xl, xt, xr, xb = [max(*x) for x in zip(humanRegion_bbs, belongings_bbs)]
这有助于避免手动输入索引时容易漏入的错误。
答案 1 :(得分:1)
如果您不喜欢抛出异常(使用上面的assert方法),也可以在函数中进行三元检查:
x_left = max(
humanRegion_bbs[0] if len(humanRegion_bbs) >= 1 else 0,
belongings_bbs[0] if len(belongings_bbs) >= 1 else 0)
等等我猜每隔一个索引。