"eval"和"int"有什么区别



早些时候我听说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()有可能运行代码,这可能会导致巨大的安全风险。我建议不要使用它,除非您清楚地知道自己在做什么,否则它可能会损害您的应用程序。

最新更新