首页 > 解决方案 > 读取和存储列表中的值

问题描述

目前正在做一个项目,我使用树莓派作为电机的监控设备。在下面的代码部分中,我试图从电机控制器读取测量值并将它们存储在缓冲区中 5 个值,然后打印它们:

def readFromSerial(prefix, command):
    buffer = []
    ser.write(command.encode()) #send data to controller
    data = ser.readline().decode().strip() #receive data from controller
    #Checking if data is received and extracting value
    if prefix in data:
        value = int(data.split('=')[1])
        #print("Asked: " + str(command) + ". Got value: " + str(value))
        buffer.append(value)
        if len(buffer) > 5:
            print(*buffer)
            buffer = buffer[5:]
    else:
        print("Message is not received")

但是,当我尝试运行代码时,print(*buffer)并没有在终端中打印任何内容。也许我没有正确存储要缓冲的值,但我自己无法找出错误,因此非常感谢任何帮助。

标签: pythonpython-3.xlist

解决方案


在您的代码中,您将缓冲区创建为一个空列表。您向控制器发送命令,然后从控制器获得响应。如果前缀在控制器的响应中,则将响应拆分为 = 并获取第二个元素并将其转换为 int。

所以现在你有一个 int 存储在名为 value 的变量中。此时缓冲区仍然是空的。然后将该值附加到缓冲区,缓冲区的长度为 1。

你检查缓冲区的长度是否为 5,它不是唯一的 1,所以你不要调用你的打印。

然后就是这样,这就是你的函数的结尾,你的函数调用返回。所以你的缓冲区只包含 0 或 1 个元素,永远不会达到 5。

如果您再次调用该函数,那么您将创建一个新的空列表并将其分配给缓冲区,因此缓冲区再次为空。


推荐阅读