繁体   English   中英

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

[英]print(len(list_a)) is printed as two but print(list_a) is printed as []

我正在修改 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)只打印[]但为什么它为print(len(lines))打印2 可能是什么问题呢?

lines不是一个列表。 lines是一个 NumPy 数组。 如果您要使用 NumPy,那么您确实需要了解这些完全不同的类型。

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

我本来希望这样的数组打印为

[[]
 []]

但显然它打印为[]

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM