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


Answers:


418

区别在于raw_input()Python 3.x中不存在,而input()确实存在。实际上,raw_input()已将旧名称重命名为input(),而旧名称input()已消失,但是可以使用轻松地对其进行模拟eval(input())。(请记住这eval()是邪恶的。如果可能,请尝试使用更安全的方法来解析输入。)


93
raw_input……有什么区别?” -“不同之处在于没有raw_input。” ...我要说是很大的不同!
ivan_pozdeev 2015年

9
我猜想在Python 2中,程序员假设程序员实际上想“执行”用户输入的命令,因为最初(我想)从用户那里请求输入可能仅是为此目的。但是,当他们意识到程序员可能还希望获得“原始”输入时,他们设计了另一个函数“ raw_input”。在Python 3中,他们注意到那是什么愚蠢,并只是删除了原始输入默认值的执行,只产生了一个简单的函数。
罗卡蒙德

1
运行Py3.5.1的Repl.it将raw_input()作为关键字。
OldBunny2800 '16

2
应该说,eval(和exec)通常应避免使用,因为它们可能会带来安全风险。有关详细信息,请参阅SO老将Ned Batchelder 认为Eval确实很危险。当然,该建议也适用于旧的Python 2 input
下午17年

1
@ PM2Ring我在警告中添加了警告。当然也有有效的用例都eval()exec(),但你首先需要明白,为什么你不应该使用eval()在决定使用它之前。
Sven Marnach '17

192

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

由于获取字符串几乎总是您想要的,因此Python 3做到了input()。正如Sven所说,如果您想要旧的行为,那就eval(input())可以了。


7
您应该添加Python 3没有raw_input()
2013年

将输入作为python表达式运行有什么用?
Akshay Vijay Jain

1
@AkshayVijayJain,可能是用于输入数字的。但这是完全不安全的。
MarSoft

112

Python 2:

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

  • input()首先采用raw_input(),然后对其执行eval()

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

Python 3:

  • raw_input()被重命名为,input()因此现在input()返回确切的字符串。
  • 旧的input()被删除。

如果要使用旧的input()(意味着需要将用户输入评估为python语句),则必须使用手动进行操作eval(input())


26

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

在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尝试将rahda评估为变量而非字符串。为了避免这种情况,我们可以在输入中使用双引号,例如“ 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函数评估用户输入。


7

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

input()在另一方面试图理解用户输入的数据。因此,像这样的输入helloworld甚至会将错误显示为' helloworld is undefined'。

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


3

如果您想确保自己的代码与python2和python3一起运行,请在脚本中使用function 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")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.