Python 3 中的“raw_input()”和“input()”有什么区别?[复制]

What's the difference between `raw_input()` and `input()` in Python 3? [duplicate]

提问人:pkumar 提问时间:2/7/2011 最后编辑:Georgypkumar 更新时间:3/30/2022 访问量:358851

问:

Python 3 和 中有什么区别?raw_input()input()

python-3.x 输入

评论

3赞 Solomon Ucko 5/4/2016
如何使一个同时接受 Python 2 和 Python 3 输入的程序兼容?
2赞 Solomon Ucko 5/4/2016
为此,请尝试设置并忽略名称错误。inputraw_input
3赞 Jack Homan 11/3/2017
查找“six”库以了解 python 2 和 3 的兼容性。
1赞 Esmu Igors 1/1/2022
我所做的只是在“try:”块中编写 Python 2 代码,在“except NameError:”块中编写 Python 3 代码。

答:

452赞 Sven Marnach 2/7/2011 #1

区别在于 Python 3.x 中不存在,而存在。实际上,旧的已经重命名为 ,旧的已经消失了,但可以很容易地通过使用 来模拟。(记住那是邪恶的。如果可能,请尝试使用更安全的方法来解析输入。raw_input()input()raw_input()input()input()eval(input())eval()

评论

107赞 ivan_pozdeev 2/11/2015
“...之间有什么区别?” - “区别在于没有。”我想说,这是一个相当大的差异!raw_inputraw_input
10赞 4/3/2015
在 Python 2 中,我猜他们假设程序员想要实际“执行”用户输入的命令,因为最初(我猜)请求用户输入可能只是为了这个。但是,当他们意识到程序员可能也想获得“原始”输入时,他们设计了另一个名为“raw_input”的函数。在 Python 3 中,他们注意到这是多么愚蠢,并简单地删除了原始输入默认值的执行,只产生了一个简单的函数。
1赞 AAM111 8/15/2016
Repl.it,运行 Py3.5.1 时,关键字是 raw_input()。
3赞 PM 2Ring 11/5/2017
需要说明的是,通常应该避免(和),因为它们可能是一种安全风险。有关详细信息,请参阅 SO 资深人士 Ned Batchelder 的 Eval really is dangerous。当然,这个建议也适用于旧的Python 2 。evalexecinput
1赞 Sven Marnach 11/5/2017
@PM2Ring我在答案中添加了警告。当然,和 都有有效的用例,但在决定使用它之前,您首先需要了解为什么不应该使用。eval()exec()eval()
198赞 Thomas K 2/7/2011 #2

在 Python 2 中,返回一个字符串,并尝试将输入作为 Python 表达式运行。raw_input()input()

由于获取字符串几乎总是您想要的,因此 Python 3 使用 .正如 Sven 所说,如果你想要旧的行为,那就行得通了。input()eval(input())

评论

8赞 Martin Thoma 11/5/2013
您应该补充一点,Python 3 没有 .raw_input()
0赞 Akshay Vijay Jain 8/11/2017
将输入作为 Python 表达式运行有什么用?
1赞 MarSoft 10/20/2017
@AkshayVijayJain,它可能是为了输入数字。但这是完全不安全的。
125赞 screenglow 2/28/2013 #3

Python 2 中:

  • raw_input()完全采用用户键入的内容,并将其作为字符串传回。

  • input()首先接受,然后对它执行 。raw_input()eval()

主要区别在于,期望语法正确的 python 语句,而不需要。input()raw_input()

Python 3:

  • raw_input()已重命名为 所以现在返回确切的字符串。input()input()
  • 旧的被删除了。input()

如果要使用旧的 ,这意味着您需要将用户输入评估为 python 语句,则必须使用 .input()eval(input())

8赞 Rubal 6/16/2015 #4

我想在大家为 python 2 用户提供的解释中添加更多细节。,到目前为止,您已经知道它评估用户以字符串形式输入的任何数据。这意味着 python 甚至不会再次尝试理解输入的数据。它所考虑的只是输入的数据将是字符串,无论它是实际的字符串还是 int 或其他任何东西。raw_input()

另一方面,试图理解用户输入的数据。因此,输入 like 甚至会将错误显示为“”。input()helloworldhelloworld is undefined

总之,对于 python 2,要输入字符串,您也需要像 '' 一样输入它,这是 python 中使用字符串的常用结构。helloworld

31赞 hackwithharsha 12/31/2015 #5

在 Python 3 中,不存在 Sven 已经提到的。raw_input()

在 Python 2 中,该函数会评估您的输入。input()

例:

name = input("what is your name ?")
what is your name ?harsha

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    name = input("what is your name ?")
  File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined

在上面的示例中,Python 2.x 试图将 harsha 评估为变量而不是字符串。为了避免这种情况,我们可以在输入周围使用双引号,例如“harsha”:

>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha

raw_input()

raw_input()' 函数不计算,它只会读取您输入的任何内容。

例:

name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'

例:

 name = eval(raw_input("what is your name?"))
what is your name?harsha

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    name = eval(raw_input("what is your name?"))
  File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined

在上面的示例中,我只是尝试使用函数评估用户输入。eval

5赞 Josef Klotzner 2/16/2019 #6

如果要确保代码与 python2 和 python3 一起运行,请在脚本开头添加函数:input()

from sys import version_info
if version_info.major == 3:
    pass
elif version_info.major == 2:
    try:
        input = raw_input
    except NameError:
        pass
else:
    print ("Unknown python version - input function not safe")