Python: AttributeError: у объекта 'int' нет ошибки атрибута при передаче пользовательского объекта - PullRequest
0 голосов
/ 23 июня 2018

У меня есть класс Microphone с этой структурой:

class Microphone(object):  # Microphone class

def __init__(self, x, y, limit):
    self.X = x
    self.Y = y
    self.low_limit = limit
    self.counter = 0

И функция, которая работает со списком экземпляров Microphone.

def knock_calibration_2d(port, microphones, W):

print " ------------------------- Knock calibration ----------------------"
i = 0
while True:
    if port.in_waiting > 0:
        msg = str(port.readline()).strip()
        if msg.startswith("ACK:"):  # received an ACK message
            continue
        elif msg.startswith("A"):  # received an ADC value
            words = msg.split(' ')
            microphones[(ord(msg[1]) - ord('0'))] = int(words[1])
            i = i + 1
        if i == len(microphones):
            break

print "Raw calibration counter values: " + str([e for e in microphones])

L = W / math.sqrt(2)  # W=47
T = 0.0

for j in range(1, len(microphones)):
    T = T + (microphones[j].counter - microphones[0].counter)
T = T / (len(microphones) - 1)
C = L / T
print "Normalized calibration counter values: " + str([e for e in microphones])
print "L=" + str(L) + " T=" + str(T) + " C=" + str(C)

return 1

Со следующим выражением я всегда получаюСообщение об ошибке «AttributeError: объект int не имеет атрибута« counter »», тем временем я вполне уверен, что список микрофонов содержит только объекты Microphone вместо int, который имеет атрибут counter.В чем здесь проблема?Я создал пастин с полным кодом здесь .Я работаю с pycharm с anaconda и интерпретатором python 2.7

T = T + (микрофоны [j] .counter - микрофоны [0] .counter)

Вот моя основная функция, в которой я определил список:

def main():

microphones = [
                Microphone(  0,    0,   50),
                Microphone(  W/2,  W/2, 50),
                Microphone(  W/2, -W/2, 50),
                Microphone( -W/2, -W/2, 50),
                Microphone( -W/2,  W/2, 50)
               ]

C = knock_calibration_2d(port, microphones, W)

1 Ответ

0 голосов
/ 23 июня 2018

В вашей функции knock_calibration_2d , строка 10 ~ 12 , вы меняете элемент микрофона.

Вы заменили элемент объектом Int, если сообщение начинается с буквы «A»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...