python ValueError : invalid literal for float()

标签 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)

有时,脚本在将值转换为 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/

相关文章:

c++ - 这样的函数重载导致的歧义如何解决?

python - 为什么 token.py 的存在会导致内置 help() 中断?

python - 如何在python中测试变量是否为空

sql - TSQL - 生成文字浮点值

c++ - C++ 中的二维数组文字

java - Java 编译器是否将 byte 和 Short 识别为文字?

javascript - 什么是 javascript 中的数组字面量表示法,什么时候应该使用它?

python - python条件过滤多列

python - ImportError:无法导入名称 get_column_letter

当字符串包含 "%s"而没有转义时的 Python 字符串格式