我有一个读取温度数据的脚本:
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)
有时,脚本在将值转换为 float 的行上会失败:
File "./projector.py", line 129, in get_temp
data[ch] = float(temp)
ValueError: invalid literal for float(): +135.057E+0
+078.260E+0
+00029
但这不是无效的文字。如果我将它输入任何 python shell,
float(+135.057E+0)
那么它会正确返回 135.057。
那么问题出在哪里?
最佳答案
我几乎可以保证,问题在于您从套接字中取出的值中存在某种非打印字符。看起来您使用的是 Python 2.x,在这种情况下,您可以使用以下命令检查它们:
print repr(temp)
您可能会在其中看到以 \x00
形式转义的内容。当您直接打印到控制台时,这些非打印字符不会显示出来,但它们的存在足以对将字符串值解析为 float 产生负面影响。
-- 为问题更改而编辑--
这对于您的问题来说是部分准确的 - 但是根本原因似乎是您从套接字读取的信息超出了您的预期,或者接收了多个值。你可以做类似的事情
map(float, temp.strip().split('\r\n'))
为了转换每个值,但如果您的函数应该返回单个浮点值,这可能会引起混淆。无论如何,问题肯定围绕着您从套接字检索的值中出现的字符的存在。
关于python ValueError : invalid literal for float(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21943877/