如何在Python 3中使用raw_input?

import sys
print(sys.platform)
print(2**100)
raw_input()

我在使用Python 3.1,不能让raw_input冻结" dos弹出。我读的书是针对Python 2.5的,而我用的是Python 3.1。

我应该怎么做才能解决这个问题?

对该问题的评论 (4)
解决办法

从Python 3开始,raw_input()被重新命名为input()

来自 What's New In Python 3.0

评论(6)

这在Python 3.x和2.x中都适用。

# Fix Python 2.x.
try: input = raw_input
except NameError: pass
print("Hi " + input("Say something: "))
评论(7)

解决这个问题的可靠方法是

from six.moves import input

6是一个模块,它修补了许多2/3常见的代码基础痛点。

1:

评论(1)

正如其他人所指出的,raw_input函数在Python 3.0中已经改名为input,你确实应该读一本更先进的书,但我想指出,有更好的方法可以看到你的脚本的输出。

从你的描述来看,我认为你使用的是Windows,你保存了一个.py文件,然后你双击它来运行它。你的程序一结束,弹出的终端窗口就会关闭,所以你无法看到你的程序的结果是什么。为了解决这个问题,你的书建议添加一个raw_input/input语句来等待用户按回车键。然而,正如你所看到的,如果出了问题,例如你的程序出错,该语句将不会被执行,窗口将关闭,你无法看到出错的地方。你可能会发现使用命令提示符或IDLE更容易。

使用命令提示符

当你看到包含你的Python程序的文件夹窗口时,按住shift键,在窗口的白色背景区域的任何地方点击右键。弹出的菜单应该包含一个条目"Open command window here"。(我想这在 Windows Vista 和 Windows 7 上是可行的。) 这将打开一个命令提示窗口,看起来像这样。

    Microsoft Windows [Version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

    C:\Users\Weeble\My Python Program>_

要运行你的程序,请输入以下内容(用你的脚本名称代替)。

    python myscript.py

...然后按回车键。(如果你得到一个错误,说"python"不是一个可识别的命令,见http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96 ) 当你的程序运行完毕,不管它是否成功完成,窗口将保持打开,命令提示符将再次出现,供你输入另一个命令。如果你想再次运行你的程序,你可以按向上的箭头调用你之前输入的命令,然后按回车键再次运行它,而不是每次都要输入文件名。

使用IDLE

IDLE是一个简单的程序编辑器,与Python一起安装。在其他功能中,它可以在一个窗口中运行你的程序。在你的.py文件上点击右键,选择"在IDLE中编辑"。当你的程序出现在编辑器中时,按F5或从"运行"菜单中选择"运行模块"。你的程序将在一个窗口中运行,该窗口在你的程序结束后保持开放,你可以在其中输入Python命令立即运行。

评论(5)

Timmerman'的解决方案在运行代码时效果很好,但如果你不想在使用 pyflakes 或类似的 linter 时得到Undefined name错误,你可以使用下面的方法代替。

try:
    import __builtin__
    input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
    pass
评论(2)

这里有一段我放在脚本中的代码,我想在py2/3-agnostic环境中运行。

# Thank you, python2-3 team, for making such a fantastic mess with
# input/raw_input :-)
real_raw_input = vars(__builtins__).get('raw_input',input)

现在你可以使用real_raw_input。 它的价格相当昂贵,但短而可读。 使用raw输入通常是很费时间的(等待输入),所以它不重要。

理论上,你甚至可以指定raw_input来代替real_raw_input,但可能有模块会检查raw_input的存在并做出相应的行为。 最好是保持安全的一面。

评论(1)

可能不是最好的解决方法,但在来这里之前,我只是为了在学习中不需要快速休息就能继续工作,临时做了这个。

def raw_input(x):
  input(x)

然后,当我在我正在处理的脚本上运行raw_input('输入你的名字。 ')在我工作的脚本上,它就像input()一样捕获它。

可能有一个不这样做的原因,我还没有遇到!

评论(1)