ChatGPT解决这个技术问题 Extra ChatGPT

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

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

如何制作一个同时接受 Python 2 和 Python 3 输入的程序?
为此,您尝试将 input 设置为 raw_input 并忽略名称错误。
查找 python 2 和 3 兼容性的“六”库。
我所做的只是在“try:”块中编写 Python 2 代码,在“除了 NameError:”块中编写 Python 3 代码。

S
Sven Marnach

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


raw_input……有什么区别?” - “不同之处在于没有 raw_input。” ...我会说,差别很大!
在 Python 2 中,我猜他们假设程序员想要真正“执行”作为用户输入的命令,因为最初(我猜)请求用户输入可能只是为了那个。但是当他们意识到程序员可能还想获得“原始”输入时,他们设计了另一个名为“raw_input”的函数。在 Python 3 中,他们注意到这是多么愚蠢,并简单地删除了原始输入默认的执行,只产生了一个简单的函数。
Repl.it,运行 Py3.5.1 有 raw_input() 作为关键字。
需要说明的是,通常应避免使用 eval(和 exec),因为它们可能存在安全风险。有关详细信息,请参阅 SO 资深人士 Ned Batchelder 的Eval really is dangerous。当然,该建议也适用于旧的 Python 2 input
@PM2Ring 我在答案中添加了警告。当然,eval()exec() 都有有效的用例,但在决定使用 eval() 之前,您首先需要了解为什么不应该使用它。
T
Thomas K

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

由于获取字符串几乎总是您想要的,Python 3 使用 input() 来实现。正如 Sven 所说,如果您想要旧的行为,eval(input()) 有效。


您应该补充说 Python 3 没有 raw_input()
运行输入作为python表达式有什么用?
@AkshayVijayJain,可能是为了输入数字。但这完全不安全。
K
Kobayashi

蟒蛇2:

raw_input() 获取用户输入的内容并将其作为字符串传回。

input() 首先获取 raw_input() 然后对其执行 eval() 。

主要区别在于 input() 需要一个语法正确的 Python 语句,而 raw_input() 不需要。

蟒蛇 3:

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

旧的 input() 已被删除。

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


m
moopet

在 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()` 函数不会评估,它只会读取您输入的任何内容。

例子:

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 函数评估用户输入。


V
Vinoth Vino

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

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

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


g
gdelab

如果您想确保您的代码使用 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")