代码之家  ›  专栏  ›  技术社区  ›  N. Doe

无法将字符串转换为浮点12+13[重复]

  •  1
  • N. Doe  · 技术社区  · 7 年前

    我正在尝试编写一个非常简单的代码,我将向它提供两个数字(使用 输入 函数),它会根据这些数字给我一个结果。当数字为 只是 数字(例如,12或15)一切正常,但当一个数字不是一个加法(例如,6+6)时,我会得到一个错误,说“无法将字符串转换为float:‘6+6’”。

    请参见以下可复制的示例:

    def calc_sal(number1, number2):
        return number1 * 4.5 + number2
    
    number1 = float(input("Give number1 "))
    number2 = float(input("Give number2 "))
    
    print(calc_sal(number1, number2))
    

    这就是错误:

    Give number1 6 + 6
    Traceback (most recent call last):
      File "SalaryCalc.py", line 4, in <module>
        number1 = float(input("Give number1 "))
    ValueError: could not convert string to float: '6 + 6'
    

    在我看来,我无法通过 输入 函数,相反,它认为这是一个字符串“6+6”。然而,当我在交互式会话中逐行运行相同的代码时,一切都正常(即,当输入为6+6时,输出为12,而不是“6+6”)。 那么,你知道为什么只有在我通过终端运行程序而不是以交互方式运行程序时才会发生这种情况吗?如何解决这个问题?

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Antony Hatchkins Alexander Hamilton    7 年前

    这取决于谁将使用此代码:

    • 如果只有你,你可以使用 eval 功能:

      >>> eval('6+6')
      12
      
    • 如果你想让别人输入数字, 评估 是邪恶的。如果输入恶意代码,它可以格式化您的硬盘!(另请参见 How harmful is eval )

      考虑其他可能性,如 ast.literal_eval (仅适用于 + - 即使 * 太难了), pyparsing (强大, 但需要为此编写程序) 等

    你也可以考虑 numexpr 库(安装 numpy 并返回numpy数组作为结果):

    >>> import numexpr as ne
    >>> ne.evaluate('6**2')
    array(36, dtype=int32)
    >>> print(ne.evaluate('6**2'))
    36