#python
#python
Вопрос:
Я здесь в полной растерянности.
Мой код стал очень длинным, поэтому я опубликую здесь только ключевые части. При необходимости я добавлю больше. Я ценю любую помощь, которую я могу получить по этому вопросу. Этот форум был так хорош для меня.
Некоторые значения, которые мне нужно сложить вместе. У меня это работает нормально в первых двух разделах. Он работает на 100%, как и ожидалось. У меня есть точно такой же код, который затем дублируется с разными значениями массива, и все работает, пока я не попытаюсь добавить числа. Я получаю сообщение об ошибке, в котором говорится, что я не могу использовать для float и string. Если я попытаюсь выполнить xxx=float(xx), он скажет, что не может преобразовать в float .
Запутанная часть этого заключается в том, что у меня уже есть это как float и разделил его на 1000. Но это значение внезапно становится строкой без каких-либо изменений, которые я вижу, и я не могу сделать его плавающим. Любая помощь была бы отличной.
Это соответствующий код. Первые два блока работают идеально. Вторые два блока работают до тех пор, пока я не попытаюсь добавить два значения, и в этом случае переменный TCIF является строкой и не может быть преобразован в float. Последняя строка завершается ошибкой. Если я выполняю TCIF — float (TCIF), он говорит, что не может преобразовать.
пример ошибки при попытке явного преобразования
"..-Metrics.py", line 143, in <module>
TCIF = float (TCIF)
ValueError: could not convert string to float:
Код:
matches = TotIntranetPort80.findall(line)
for firestick in matches:
# Find and set 80 Proxy variable
TotIntranetArrayPort80 = line.split()
TIntranetPort80 = TotIntranetArrayPort80[5]
TIntranetPort801 = TotIntranetArrayPort80[6]
TIntranetPort80 = float(TIntranetPort80)
if TIntranetPort801 == "MB":
TIntranetPort80 = TIntranetPort80 / 1000
matches = TotIntranetPort443.findall(line)
for firestick in matches:
# Find and set 443 Proxy variable
TotIntranetArrayPort443 = line.split()
TIntranetPort443 = TotIntranetArrayPort443[5]
TIntranetPort4431 = TotIntranetArrayPort443[6]
TIntranetPort443 = float(TIntranetPort443)
if TIntranetPort4431 == "MB":
TIntranetPort443 = TIntranetPort443 / 1000
#print(TIntranetPort443)
TIntranet = TIntranetPort80 TIntranetPort443
TIntranet = round(TIntranet, 2)
TIntranet = str(TIntranet)
matches = TotFileXferCIF.findall(line)
for firestick in matches:
# Find and CIFS For File Transfers
TCIFArray = line.split()
TCIF = TCIFArray[6]
TCIF1 = TCIFArray[7]
TCIF = float(TCIF)
if TCIF1 == "MB":
TCIF = TCIF / 1000
matches = TotFileXferSMB.findall(line)
for firestick in matches:
# Find SMB File Transfers
TSMBArray = line.split()
TSMB = TSMBArray[5]
TSMB1 = TSMBArray[6]
TSMB = float(TSMB)
if TSMB1 == "MB":
TSMB = TSMB / 1000
**TFileTransfer = TCIF TSMB**
Комментарии:
1. ты имел в виду
firestick.split()
?2. Вы смотрели
TCIFArray[6]
?!3. TCIFArray[6] представляет собой последовательность чисел с одной десятичной мерой в МБ или ГБ. Я проверил это. Действительно, я извлекаю их в МБ и делю на 1000, чтобы все было в ГБ. Никаких проблем с этой математикой..
4. попробуйте распечатать TCIF после разделения
5. Никаких проблем с ее распечаткой после разделения. Все числа выглядят нормально. вот пример вывода из TCIF и TCIFArray[6] 11.9 11.9 18.3 18.3 11.2 11.2 12.8 12.8
Ответ №1:
Попробуйте начать с этого. Если вы хотите посмотреть, что делает команда zip([…]), запустите приведенный ниже пример.
matches1 = TotFileXferCIF.findall(line)
matches2 = TotFileXferSMB.findall(line)
matches = zip(matches1, matches2) #shuffle lists together
for firestick1, firestick2 in matches:
#do your work here
пример почтового индекса:
matches1 = range(10)
matches2 = range(10,18)
print(zip(matches1, matches2))
выходной сигнал:
[(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17)]
Комментарии:
1. Хорошо, будет сделано. Еще не делал списки и кортежи. Ha! Следующие главы. Я посмотрю, что делает zip, и поработаю над этим некоторое время.
2. Он перемешивает списки вместе. Это здорово. Особенно, если у вас есть параллельные массивы … что, похоже, у вас есть.
3. >>> совпадения1 = диапазон (10) >>> совпадения2= диапазон (10,18) >>> print(zip(совпадения1, совпадения2)) <zip-объект в 0x02502CB0> >>> Понятия не имею, что это сделало
4. Я использую python 3, а не 2, если это имеет значение
Ответ №2:
Базовая отладка:
try:
TCIF = float(TCIF)
except ValueError:
print(repr(TCIF))
Это покажет вам, что именно находится TCIF
в точке сбоя, и вы можете вернуться оттуда.
Комментарии:
1. Да, это звучит хорошо. Я получаю синтаксические ошибки, но могу найти в Google способ их написания. Не нравится строка except
2. Я получаю пустые тики. список »
3. Если то, что вы видите
''
, тогдаTCIF
пусто иfloat()
не может преобразовать пустую строку.4. Я задавался вопросом, так ли это. Но если я просто печатаю (TCIF), число течет. Я еще немного поработаю над этим