Python Float成为我无法转换为float的字符串

时间:2014-06-19 20:14:59

标签: python

我在这里完全失败了。

我的代码变得非常冗长,所以我只会在这里发布关键部分。如果需要,我会放更多。我感谢我能在这一方面获得的任何帮助。这个论坛对我来说太棒了。

我需要将一些值加在一起。我在前两节做得很好。它按预期工作100%。我有完全相同的代码然后与不同的数组值重复,一切正常,直到我尝试添加数字。我得到一个错误,说我不能在浮点和字符串上使用+。如果我尝试做xxx = float(xx),它说它无法转换为浮点数。

这个令人困惑的部分是我已经将它作为一个浮点数并将它除以1000.但是这个值突然变成了一个字符串,没有我能看到的变化,我不能把它变成浮点数。任何帮助都会很棒。

这是相关代码。前两个区块完美无缺。第二个两个块工作,直到我尝试添加两个值,在这种情况下,变量TCIF是一个字符串,不能成为一个浮点数。最后一行失败了。如果我做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**

2 个答案:

答案 0 :(得分:0)

尝试从此开始。 如果您想查看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

zip示例:

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 :(得分:0)

基本调试:

try:
    TCIF = float(TCIF)
except ValueError:
    print(repr(TCIF))

这将向您显示失败时TCIF内的确切内容,您可以从那里进行回溯。