2015-08-21 4 views
-2
import bluetooth 
import time 

class btHandler(): 

    hostMACAddress = '98:D3:31:30:45:80' 
    port = 1 
    gyro = [None] 
    rot = [None] 
    data = 0 

    def __init__(self): 
     self.clientSocket = bluetooth.BluetoothSocket(bluetooth.RFCOMM) 
     self.clientSocket.connect((self.hostMACAddress, self.port)) 
     self.clientSocket.setblocking(True) 

    def testRead(self): 
     self.gyro = [None] * 3 
     global data 
     d = self.clientSocket.recv(1) 
     d = ord(d[0]) 
     if d == 0x25: 
      d = self.clientSocket.recv(1) 
      d = ord(d[0]) 
      if d == 0x72: 
       time.sleep(0.02) 
       self.data = self.clientSocket.recv(28) 
      if len(self.data)<28: 
       print "Wrong data lenght", len(self.data) 
      else: 
       self.gyro[0] = ord(self.data[0]) * 256 + ord(self.data[1]) 
       print self.gyro[0] 
       return self.gyro[0] 

    def getGyroValues(self): 
     self.rot = [None] * 3 
     self.rot[0] = ord(self.data[10]) * 256 + ord(self.data[11]) 
     print rot[1]; 

Это мой код, и я получаю сообщение об ошибке в строке 37 (self.rot [0] = ord (self.data [10]) * 256 + ord (self.data [11])) Что моя программа делает, это считываемый микроконтроллер данных, использующий bluetooth.Python TypeError: объект 'int' не имеет атрибута '__getitem__'

+4

'__getitem__' вызывается при индексировании, как вы делаете на этой строке (' self.data [10] 'и' self.data [11] '). У вас есть ошибка в вашем коде, где 'self.data' устанавливается в целое число, но, очевидно, вы ожидаете, что это список или кортеж или какая-то коллекция. –

+0

Я не очень хорошо знаю python, но ошибка говорит о том, что 'self.data' не является типом массива, хотя вы пытаетесь получить к нему доступ, как там. –

+1

Поскольку мы не видим код, в котором используется этот модуль (где 'getGyroValues' называется?), Вам трудно помочь, не говоря уже о том, что' self.data' является целым числом, когда модуль ожидает, что он будет списком или кортеж. Я бы попытался отлаживать точку до того момента, когда вызывается 'getGyroValues' и проверяет, какое значение данных находится в этой точке, а затем откидывается назад. –

ответ

0

__getitem__ индексирует, поэтому проверьте свой код, чтобы убедиться, что вы сделали операцию индекса ([]) на int в коде и исправьте его.

Смежные вопросы