Ошибка не может умножить последовательность на non-int типа ‘float’

Вопрос: Я получаю следующую ошибку: if len(new_send_times) > rate_limit * window * self._throttle: TypeError: can't multiply sequence by non-int of type 'float' Это код: if len(new_send_times) > rate_limit * window * self._throttle: # Sleep the remainder of the window period. delta = now - new_send_times[0] total_seconds = (delta.microseconds + (delta.seconds + delta.days * 24 *

Вопрос:

Я получаю следующую ошибку:

if len(new_send_times) > rate_limit * window * self._throttle: TypeError: can’t multiply sequence by non-int of type ‘float’

Это код:

if len(new_send_times) > rate_limit * window * self._throttle: # Sleep the remainder of the window period. delta = now — new_send_times[0] total_seconds = (delta.microseconds + (delta.seconds + delta.days * 24 * 3600) * 10 ** 6) / 10 ** 6 delay = window — total_seconds if delay > 0: sleep(delay) recent_send_times.append(now) # end of throttling

используемые им значения

if len([]) > 1.0 * 2.0 * 0.5:

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

if len(new_send_times) > float(rate_limit) * float(window) * float(self._throttle): Лучший ответ:

Ошибка довольно самоисследовательная. Вы выполняете операцию в форме

list * float # or other sequence * float

который запрещен в python, вы можете

numeric * float # «traditional» multiplication

или

list * int # creates concatenated copies of the list provided

Поэтому исследуйте свой код, проверяйте, какой объект является списком, и преобразуйте его в число, поскольку логика кода предполагает, что это ваше намеренное поведение.

Примеры:

[1] * 3 = [1,1,1] [1] * 1.5 # ERROR 1 * 1.5 == 1.5 float([1]) * 1.5 == 1.5 «1» * 1.5 # ERROR float(«1») * 1.5 == 1.5 Ответ №1

Сообщение об ошибке

TypeError: can’t multiply sequence by non-int of type ‘float’

говорит, что хотя бы один из

len(new_send_times), rate_limit, window, self._throttle

это не число, как вы подозреваете, но какая-то последовательность.

Тот факт, что вы print эти значения и видите, что вы ожидаете, а также тот факт, что использование float() для значений делает работу кода, настоятельно предлагает, чтобы одно из них представляло собой строковое представление числа (например, ‘1.0’) чем само число – str в Python считается sequence.

len() всегда будет возвращать int (или поднять ошибку!), поэтому нет необходимости беспокоиться об этом, но одна из трех других, вероятно, является строкой. Вам нужно [raw_]input значения ([raw_]input? Parsed file?) И убедиться, что они преобразуются в числовые типы в соответствующей точке (чем раньше, тем лучше, так как в других контекстах вы можете получить более тонкие проблемы).

Чтобы сказать разницу, при print значений для проверки вы можете сделать, например,

print(rate_limit, type(rate_limit))

Оцените статью
Добавить комментарий