首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >"eval“和"int”的区别是什么?

"eval“和"int”的区别是什么?
EN

Stack Overflow用户
提问于 2017-08-25 20:34:01
回答 2查看 12.2K关注 0票数 6

前面我听说eval(input(a))会自动将字符串转换为整型,但如果我编写了

代码语言:javascript
运行
复制
age = eval(input("enter age"))

在输入过程中,我键入01是一个错误,但当我编码时

代码语言:javascript
运行
复制
age = int(input("enter age"))

01作为输入可以完美地工作。为什么会这样呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-25 20:36:04

eval计算python表达式的值。在Python3中,不允许以0开头的数字(除了0000,请参阅Why does 000 evaluate to 0 in Python 3?)。在python 2中,这些被解释为八进制(以8为基数)数字。不是更好。(Python3base 8现在只使用Oo前缀)

int执行字符串到整数的转换,因此它不能计算复杂表达式(您不需要),但不受前导零语法的约束。

另一个很好的特性是,您可以使用一个简单且限定的try/except块来检查输入的表达式是否为整数:

代码语言:javascript
运行
复制
while True:
   try:
       age = int(input("enter age"))
       break
   except ValueError:
       print("Retry!")

(使用eval时,您必须防止所有异常)

建议:使用int,因为它更安全,没有安全问题(eval可以计算任何表达式,包括系统调用和文件删除),并且非常适合您的目的。

注意:上面的代码在Python2中仍然是不安全的:input的行为类似于eval。您可以使用模块开头的简单代码来保护您的代码不受此影响:

代码语言:javascript
运行
复制
try:
    input = raw_input
except NameError:
    pass

因此,Python2 input不再是不可访问的,而是调用raw_input。Python 3会忽略该代码。

票数 8
EN

Stack Overflow用户

发布于 2017-08-25 20:43:41

eval()用于验证表达式。On number被认为是一个表达式,但八进制数(以0开头的数字)除外。int()处理字符串到整数的转换。避免使用eval()的原因有很多。只需记住:

  • Python 2.xx =raw_input(‘在此处输入数字:')
  • Python 3.xx =input(’在此处输入数字:')
  • Python 2.x

安全风险:x=input(‘在此处输入数字:')

  • Python3.x

安全风险:x= eval(input('Enter number here:'))

此外,请记住,eval()有可能运行代码,这可能会导致巨大的安全风险。我建议不要使用它,除非您清楚地知道自己在做什么,否则它可能会危及您的应用程序。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45881547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档