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

评论

您如何制作一个既可以兼容Python 2也可以兼容Python 3的输入的程序?

为此,您尝试将输入设置为raw_input并忽略名称错误。

在``six''库中查找python 2和3的兼容性。

#1 楼

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

评论


“ raw_input和...之间有什么区别?” -“不同之处在于没有raw_input。” ...我要说是很大的不同!

– ivan_pozdeev
2015年2月10日在21:03



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

– J. C. Rocamonde
2015年4月3日13:56

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

–OldBunny2800
16年8月15日在2:20

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

– PM 2环
17年11月5日在10:53

@ PM2Ring我在警告中添加了警告。当然,eval()和exec()都有有效的用例,但是在决定使用eval()之前,您首先需要了解为什么不应该使用它。

– Sven Marnach
17年11月5日,12:33

#2 楼

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

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

评论


您应该添加Python 3没有raw_input()。

–马丁·托马
13年5月5日在9:28

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

–阿克斯海(Akshay Vijay Jain)
17年8月11日在5:52

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

– MarSoft
17-10-20在0:19

#3 楼

Python 2:


raw_input()完全接受用户键入的内容,并将其作为字符串传递回。
input()首先获取raw_input(),然后再对其执行一次eval()

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

Python 3:



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

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

#4 楼

在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试图将hasha评估为变量而不是字符串。为了避免这种情况,我们可以在输入周围使用双引号,例如“ 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 楼

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

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

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

#6 楼

如果您想确保自己的代码与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")