print(len(list_a))打印为两个,但print(list_a)打印为[]

时间:2019-12-04 02:32:54

标签: python numpy

我正在修改python代码,以查看pygame表面上的车道检测图像。它工作正常,但偶尔我会看到来自以下功能的错误消息(我在调试中添加了两个打印件)。

def display_lines(image, lines):
    line_image = np.zeros_like(image)
    if lines is not None:
        print('len of lines:',len(lines))
        print(lines)
        for line in lines:
            x1, y1, x2, y2 = line
            cv2.line(line_image, (x1,y1), (x2,y2), (255,0,0), 4)
    return line_image

正常时,打印如下:

len of lines: 2
[[ 251  720  998    0]
 [1026  720  281    0]]

出现错误时,错误消息如下:

len of lines: 2 
[]
Traceback (most recent call last):
  File "./automatic_control.py", line 758, in <lambda>
    self.sensor.listen(lambda image: CameraManager._parse_image(weak_self, image))
  File "./automatic_control.py", line 803, in _parse_image
    line_image = display_lines(lane_image, averaged_lines)
  File "./automatic_control.py", line 700, in display_lines
    x1, y1, x2, y2 = line
ValueError: need more than 0 values to unpack

在错误情况下,print(lines)仅打印[],但是为什么却为2打印print(len(lines))?可能是什么问题?

1 个答案:

答案 0 :(得分:2)

lines不是列表。 lines是一个NumPy数组。这些是您真正需要完全不同的类型,以了解您要使用NumPy的区别。

在使您感到困惑的情况下,lines是一个2x0数组。 NumPy数组的len是其第一维的长度,因此lines的长度为2,但仍包含0个元素。

我希望这样的数组打印为

[[]
 []]

但显然它打印为[]

要获得更多信息,您应该打印数组的repr,它会显示类似的内容

array([], shape=(2, 0), dtype=something)