Python 2.x和3.x中输入命令的区别

5

好的,我使用了很多输入命令,并且我知道在Python2中可以这样做:

text = raw_input ('Text here')

但是现在我使用Python 3,想知道以下两者有什么区别:

text = input('Text here')

并且:

text = eval(input('Text here'))

我什么时候需要使用其中一个而不是另一个?


如果您不习惯使用 eval,简而言之,它会评估您传递给它的字符串,就好像它是代码一样。 - whatyouhide
1
如果你从来没有使用过 eval(),那可能没问题。但如果你确实使用了 eval(),千万不要在未经过滤的用户输入上使用它。考虑一下如果用户键入 os.system("rm -rf /") 会发生什么。 - Robᵩ
2个回答

8

在 Python 3.x 中,raw_input 被改为 input,而 Python 2.x 的 input 被删除了。因此,在 3.x 中进行如下操作:

text = input('Text here')

在2.x版本中,您基本上是这样做的:

text = raw_input('Text here')

在3.x中执行此操作:

text = eval(input('Text here'))

在2.x中这样做与在3.x中是相同的:

text = input('Text here')

下面是对Python文档的简要概述:
PEP 3111:将raw_input()重命名为input()。也就是说,新的input()函数从sys.stdin读取一行并返回去掉尾随换行符的结果。如果输入提前结束,则会引发EOFError异常。要获取旧版本的input()行为,请使用eval(input())

谢谢,但我不知道Python 2.x中raw_input和input之间的区别。你能告诉我吗? - user2820691
raw_input仅读取用户输入并将其作为字符串返回。另一方面,input评估用户输入的内容作为真实的Python代码(请注意,这是在2.x中)。 - user2555451

2

这两者是等价的:

raw_input('Text here')       # Python 2
input('Text here')           # Python 3

这两种方式是等价的:

input('Text here')           # Python 2
eval(raw_input('Text here')) # Python 2
eval(input('Text here'))     # Python 3

请注意,在Python 3中没有名为raw_input()的函数,因为Python 3的input()只是将raw_input()重命名。在Python 3中,没有Python 2中input()的直接等效项,但可以像这样轻松模拟:eval(input('Text here'))
现在,在Python 3中input('Text here')eval(input('Text here'))之间的区别在于前者返回输入的字符串表示形式(去除尾随换行符),而后者不安全地评估输入,就好像直接在交互式解释器中输入表达式一样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接