2013-05-03 54 views
0

我想做一个程序,从串口获取数据的开始和停止位将是*。收到的数据将在* 1234567#这种形式。但它说我的'类型'对象不是可以下载的。我对Python真的很陌生,我不知道下一步该怎么做,任何人都可以帮我解决这个问题吗?类型错误发生使用缓冲区memoryview

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 
>>> 
+0

最初是什么'memoryview'?你把它分配给v。基本上这个错误说你不能在'v [0]中使用[]运算符'v' – Juho 2013-05-03 07:44:59

+1

@Jhoho:'memoryview'是一个内建的。 – 2013-05-03 08:02:22

回答

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() 

这是不可能的,只要你想实际工作,但它是你的代码的简化。 如何实际上处理它取决于数据看起来更详细。

+0

'v'可能应该是'data' – Juho 2013-05-03 08:06:06

+0

@Juho:烨,谢谢。 – 2013-05-03 08:12:39

+0

嘿,这段代码似乎不起作用:< – user2294001 2013-05-12 10:49:00