无法将字符串转换为浮点数 12 + 13
could not convert string to float 12 + 13
我正在尝试编写一个非常简单的代码,我将向它提供两个数字(使用 input 函数),它会根据这些数字给我一个结果。当数字是 just 数字(例如 12 或 15)时,一切正常,但是当不是数字而是加法(即 6 + 6)时,我得到错误提示“无法将字符串转换为浮点数:'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'
在我看来,我无法通过 input 函数执行加法,而是认为它是一个字符串“6 + 6”。但是,当我在交互式会话中逐行 运行 相同的代码时,一切正常(即,当输入为 6 + 6 时,输出为 12,而不是“6 + 6”)。
那么你为什么只有当我通过终端而不是交互地 运行 程序时才会发生这种情况?以及如何解决这个问题?
谢谢。
这取决于谁将使用此代码:
如果只有你,你可以使用eval
功能:
>>> eval('6+6')
12
如果你想让别人输入数字,eval
是邪恶的。如果输入恶意代码,它可以格式化您的硬盘! (另见 How harmful is eval)
考虑其他可能性,例如ast.literal_eval
(仅适用于+
和-
,即使*
也太难了),pyparsing
(强大,
但需要为此编写程序)
等
您还可以考虑 numexpr
库(安装 numpy
作为要求,结果安装 returns numpy 数组):
>>> import numexpr as ne
>>> ne.evaluate('6**2')
array(36, dtype=int32)
>>> print(ne.evaluate('6**2'))
36
我正在尝试编写一个非常简单的代码,我将向它提供两个数字(使用 input 函数),它会根据这些数字给我一个结果。当数字是 just 数字(例如 12 或 15)时,一切正常,但是当不是数字而是加法(即 6 + 6)时,我得到错误提示“无法将字符串转换为浮点数:'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'
在我看来,我无法通过 input 函数执行加法,而是认为它是一个字符串“6 + 6”。但是,当我在交互式会话中逐行 运行 相同的代码时,一切正常(即,当输入为 6 + 6 时,输出为 12,而不是“6 + 6”)。 那么你为什么只有当我通过终端而不是交互地 运行 程序时才会发生这种情况?以及如何解决这个问题?
谢谢。
这取决于谁将使用此代码:
如果只有你,你可以使用
eval
功能:>>> eval('6+6') 12
如果你想让别人输入数字,
eval
是邪恶的。如果输入恶意代码,它可以格式化您的硬盘! (另见 How harmful is eval)考虑其他可能性,例如
ast.literal_eval
(仅适用于+
和-
,即使*
也太难了),pyparsing
(强大, 但需要为此编写程序) 等
您还可以考虑 numexpr
库(安装 numpy
作为要求,结果安装 returns numpy 数组):
>>> import numexpr as ne
>>> ne.evaluate('6**2')
array(36, dtype=int32)
>>> print(ne.evaluate('6**2'))
36