-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__'
'__getitem__' вызывается при индексировании, как вы делаете на этой строке (' self.data [10] 'и' self.data [11] '). У вас есть ошибка в вашем коде, где 'self.data' устанавливается в целое число, но, очевидно, вы ожидаете, что это список или кортеж или какая-то коллекция. –
Я не очень хорошо знаю python, но ошибка говорит о том, что 'self.data' не является типом массива, хотя вы пытаетесь получить к нему доступ, как там. –
Поскольку мы не видим код, в котором используется этот модуль (где 'getGyroValues' называется?), Вам трудно помочь, не говоря уже о том, что' self.data' является целым числом, когда модуль ожидает, что он будет списком или кортеж. Я бы попытался отлаживать точку до того момента, когда вызывается 'getGyroValues' и проверяет, какое значение данных находится в этой точке, а затем откидывается назад. –