使用缓冲区memoryview发生类型错误

时间:2013-05-03 07:38:37

标签: python python-3.x pyserial xbee

我想做一个从串口获取数据的程序,其开始和停止位将是 * 。收到的数据将在 * 1234567#此表单中。但它说我的'type'对象不是可订阅的。我是Python的新手,我不知道下一步该做什么,有人可以帮我解决这个问题吗?

import serial

ser = serial.Serial(
    port='COM5',\
    baudrate=9600,\
    parity=serial.PARITY_NONE,\
    stopbits=serial.STOPBITS_ONE,\
    bytesize=serial.EIGHTBITS,\
        timeout=0)

MAX_BUF_SIZE = 16
bits = 0

v = memoryview



print("connected to: " + ser.portstr)



while(1):
    for memoryview in ser.read():
        if v[0] == 42:

            if v[-1] == 35:

                print(v[1:-1].tobytes())

        else:
            memoryview = 0
ser.close()

connected to: COM5
Traceback (most recent call last):
  File "C:\Python33\Saves\Receive using buff.py", line 24, in <module>
    if v[0] == 42:
TypeError: 'type' object is not subscriptable
>>> 

1 个答案:

答案 0 :(得分:1)

你正在做的事情过于复杂。我根本不知道你为什么要使用memoryview。就这样做:

import serial

ser = serial.Serial(
    port='COM5',
    baudrate=9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=0)

print("connected to: " + ser.portstr)
for data in ser.read():
    if data[0] == 42 and data[-1] == 35:
           print(data[1:-1].decode())
ser.close()

这不太可能实际工作,但它是您的代码的简化。 如何实际处理它取决于数据的详细程度。