【问题标题】:type error occurred using buffer memoryview使用缓冲区 memoryview 发生类型错误
【发布时间】:2013-05-03 07:38:36
【问题描述】:

我想做一个从串口获取数据的程序,开始和停止位将是*#。收到的数据将采用 *1234567# 这种形式。但它说我的“类型”对象不可下标。我真的是 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
>>> 

【问题讨论】:

  • memoryview 最初是什么?你把它分配给 v。基本上错误说你不能在v[0]中为 v 使用 [] 运算符@
  • @Juho: memoryview 是内置的。

标签: python python-3.x pyserial xbee


【解决方案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()

这不太可能真正如您所愿,但它是您的代码的简化。 如何实际处理它取决于数据看起来如何更详细。

【讨论】:

  • 那个v应该是data
  • @user2294001:也就是说,正如我所提到的,很有可能。我什至没有串口来测试它,更不用说你连接的串口设备了。我刚刚修复了与您关于类型错误的问题有关的代码错误。如果您滥用 pyserial 或您的串行设备是另一个问题。我的答案回答了问题,应该被选为正确答案。您遇到的其他问题应作为新问题发布。
猜你喜欢
  • 2019-02-26
  • 1970-01-01
  • 2012-05-30
  • 2020-10-06
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
相关资源
最近更新 更多