早些时候我听说eval(input(a))
会自动将字符串转换为 int,但是如果我编码
age = eval(input("enter age"))
在输入过程中,我输入 01 是一个错误,但是当我编码时
age = int(input("enter age"))
01作为输入完美运行。这是为什么呢?
eval
计算 python 表达式。在 python 3 中,不允许以0
开头的数字(0000
除外,请参阅为什么 000 在 Python 3 中的计算结果为 0?在python 2中,这些被解释为八进制(基数8(数字。不是更好...(Python 3 Base 8 现在只使用Oo
前缀(
int
执行字符串到整数的转换,因此它无法计算复杂表达式(您不需要(,但不受此前导零语法的约束。
另一个不错的功能是,您可以使用简单且限定的try/except
块来检查输入的表达式是否为整数:
while True:
try:
age = int(input("enter age"))
break
except ValueError:
print("Retry!")
(使用eval
您必须防止所有异常(
建议:使用int
,因为它更安全,没有安全问题(eval 可以评估任何表达式,包括系统调用和文件删除(,并且非常适合您的目的。
注意:上面的代码在python 2中仍然不安全:input
的行为类似于eval
。您可以使用模块开头的简单代码保护您的代码免受这种情况的影响:
try:
input = raw_input
except NameError:
pass
因此,Python 2input
不再是无法访问的,而是调用raw_input
。Python 3 忽略了该代码。
>eval()
用于验证表达式。On Number 被视为表达式,但八进制数字(以 0 开头的数字(除外。int()
处理字符串到整数的转换。您应该避免使用的原因有很多eval()
.请记住:
-
蟒蛇 2.x
x = raw_input('Enter number here: ')
-
Python 3.x
x = input('Enter number here: ')
-
Python 2.x
安全风险:x = input('Enter number here: ')
-
Python 3.x
安全风险:x = eval(input('Enter number here: '))
另外,请记住,eval()
有可能运行代码,这可能会导致巨大的安全风险。我建议不要使用它,除非您清楚地知道自己在做什么,否则它可能会损害您的应用程序。