2017-01-29 14 views
-2

У меня есть класс, который имеет атрибут 'latest_level', и это должно быть число с плавающей запятой. Затем у меня есть метод, который включает в себя last_level в уравнении для возврата другого числа с плавающей запятой. В этом методе, если я использую линию:Python 3: Это поплавок или список?

def relative_water_level(self): 
    level = float(self.latest_level) 

Я получаю результат:

TypeError: float() argument must be a string or a number, not 'list' 

который я предполагаю, означает self.latest_level список. Если изменить эту строку: четкости relative_water_level (само):

level = float(self.latest_level[0]) 

Я получаю выход:

TypeError: 'float' object is not subscriptable 

Что я предполагаю, что означает, что self.latest_level является поплавок. У кого-нибудь есть идея, почему это происходит и как я могу заставить его относиться к self.latest_level как к float?

Редактировать: я не пытаюсь и подстрочный индекс позже. Остальная часть метода:

level = float(self.latest_level[0]) 
     low = float(self.typical_range[0]) 
     high = float(self.typical_range[1]) 
     return ((level - low)/high) 

И ошибка указывает, что ошибка в строке указанной выше

File "C:\Users\rache\Documents\Flood Warning\partia-flood-warning 
system\floodsystem\station.py", line 58, in relative_water_level 
level = float(self.latest_level[0]) 

TypeError: 'float' object is not subscriptable 
+2

Привет, Рейчел и добро пожаловать в переполнение стека. Было бы лучше включить код, демонстрирующий это поведение, чтобы мы могли его проверить. Без этого мы не сможем дать полезные ответы (и должны прибегать к угадыванию). Может быть, после кастинга, чтобы плавать, вы индексируете его, мы не можем действительно знать. –

+0

Привет, Джим, спасибо за ваш совет. Я добавлю дополнительный код на вопрос –

+2

Просьба показать полную трассировку стека ошибок для этих двух ошибок. Если эти ошибки происходят в одном и том же методе, возможно, что метод вызывается в два разных раза, когда 'last_level' является поплавком один раз, а список - в другое время. – poke

ответ

0

subscriptable объект относится к чему-то, который реализует __getitem__() метод. вы можете изменить тип last_level. Я добавил пример кода, который приведет к той же ошибке.

class Level: 
latest_level = 20.0 
def getLevels(self): 
    self.latest_level = [20,30] 
def relative_water_level(self): 
    level = float(self.latest_level[0]) 
    print(level) 

waterLevel = Level() 
waterLevel.relative_water_level() 
waterLevel.getLevels() 
waterLevel.relative_water_level() 

для отладки типа использования (self.latest_level) перед поплавком (self.latest_level) и изменяются в соответствии с трассировкой стеки.

+0

Хорошая идея с отладкой. В нем говорится, что last_level на самом деле является float. Я все еще не понимаю, почему он рассматривает его как список, когда я хочу использовать его в уравнении. Спасибо за вашу помощь! –

+0

Мне нужно увидеть код, очевидно, что он меняет тип где-то. Можете ли вы показать мне код каким-то образом? – Harry

0

Проблема решена. Оказывается, некоторые из станций мониторинга наводнений, в которых я импортирую данные, производят испорченные данные со списками номеров повсюду, поэтому я просто должен был игнорировать эти станции на данный момент. Спасибо за вашу помощь и удачу всем, кто живет рядом с этими реками!