Python Float становится строкой, которую я не могу преобразовать в float

#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), число течет. Я еще немного поработаю над этим