首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中eval(“and ()”)和eval(and())之间的区别

Python中eval(“and ()”)和eval(and())之间的区别
EN

Stack Overflow用户
提问于 2019-03-13 14:38:49
回答 2查看 3.9K关注 0票数 4

我正在尝试以下功能:

代码语言:javascript
复制
x = eval(input())

如果输入为123,并且x的类型也是int,它可以很好地工作:

代码语言:javascript
复制
In [22]: x=eval(input("enter:"))
enter:123
In [24]: print(type(x))
<class 'int'>

但是,在以abcd的形式提供输入时,它会抛出错误:

代码语言:javascript
复制
In [26]: x=eval(input("enter:"))
enter:abcd
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-26-fb0be0584c85> in <module>()
----> 1 x=eval(input("enter:"))

<string> in <module>()

NameError: name 'abcd' is not defined

同样,当我将代码更改为:

代码语言:javascript
复制
x=eval('input()')

它运作良好:

代码语言:javascript
复制
In [27]: x=eval('input("enter:")')
enter:abcd

In [28]: print(x)
abcd

但是当输入为123时,x的类型是str而不是int

代码语言:javascript
复制
In [30]: x=eval('input("enter:")')
enter:123

In [31]: print(type(x))
<class 'str'>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-13 14:44:11

eval评估一段代码。input从用户输入中获取字符串。因此:

  • eval(input())评估用户输入的任何内容。如果用户输入123,结果将是一个数字,如果他们输入"foo"将是一个字符串,如果他们输入?wrfs,则会引发一个错误。
  • eval("input()")计算字符串"input()",这将导致input函数的执行。这将向用户请求一个字符串(以及其他任何内容),即123将是字符串"123"?wrfs将是字符串"?wrfs""foo"将是字符串'"foo"' (!)。

第三个版本可能会使差异变得明显:eval(eval("input()"))eval(input())完全相同。

票数 6
EN

Stack Overflow用户

发布于 2019-03-25 18:17:31

与其关注eval(“input()”)eval(input())之间的差异,不如关注它们的主要相似之处:您不应该这样做!

我不知道eval(input())的成语来自于Python3,这可能是Python2用户移植input()的误解,他们没有学会使用raw_input(),但要避免使用!

在这种情况下,正确的答案是,如果您想要一个str,请执行以下操作:

代码语言:javascript
复制
x = input()

如果您想要int,请执行以下操作:

代码语言:javascript
复制
x = int(input())

但是,当您打开您的程序时,请停止使用eval(),以防止潜在用户滥用您的程序:

代码语言:javascript
复制
>>> x = eval(input('enter: '))
enter: __import__("os").system("rm *")
>>> 

可别在家里尝试这些哟!或者工作!

如果要输入常量Python数据结构,可以从ast模块尝试literal_eval()

代码语言:javascript
复制
>>> from ast import literal_eval
>>> my_dict = literal_eval(input('enter dict: '))
enter dict: {'a': 1, 'b': 2, 'c': 3}
>>> my_dict
{'a': 1, 'b': 2, 'c': 3}
>>> type(my_dict)
<class 'dict'>
>>>  

但还是要小心!

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

https://stackoverflow.com/questions/55144515

复制
相关文章

相似问题

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