python ValueError:float()的文字无效

ast*_*ave 21 python literals

我有一个读取温度数据的脚本:

def get_temp(socket, channels):

    data = {}
    for ch in channels:
        socket.sendall('KRDG? %s\n' % ch)
        time.sleep(0.2)
        temp = socket.recv(32).rstrip('\r\n')

        data[ch] = float(temp)
Run Code Online (Sandbox Code Playgroud)

有时,脚本会在将值转换为float的行上失败:

文件"./projector.py",第129行,在get_temp
数据中[ch] = float(temp)
ValueError:float()的文字无效:+ 135.057E + 0
+ 078.260E + 0
+00029

但这不是一个无效的文字.如果我把它输入任何python shell,

float(+135.057E+0)
Run Code Online (Sandbox Code Playgroud)

然后它正确返回135.057.

那么问题是什么?

g.d*_*d.c 11

我几乎可以保证问题是某种非打印字符,它存在于你从套接字中拉出来的价值中.看起来您正在使用Python 2.x,在这种情况下,您可以使用以下方法检查它们:

print repr(temp)
Run Code Online (Sandbox Code Playgroud)

你可能会看到那些在表格中被逃脱的东西\x00.直接打印到控制台时,这些非打印字符不会显示,但它们的存在足以对将字符串值解析为浮点数产生负面影响.

- 编辑更改问题 -

这对你的问题来说这部分是准确的 - 但根本原因似乎是你正在阅读比你预期的套接字更多的信息或以其他方式接收多个值.你可以做点什么

map(float, temp.strip().split('\r\n'))
Run Code Online (Sandbox Code Playgroud)

为了转换每个值,但如果你的函数应该返回一个浮点值,这可能会引起混淆.无论如何,这个问题肯定围绕着你从套接字中检索到的值中不希望看到的字符的存在.