我如何在Python 3中使用raw_input

时间:2009-06-05 08:32:23

标签: python python-3.x

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

我正在使用Python 3.1,无法让raw_input“冻结”DOS弹出窗口。我正在阅读的书是针对Python 2.5的,我正在使用Python 3.1

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

11 个答案:

答案 0 :(得分:881)

raw_input()已重命名为input()

来自http://docs.python.org/dev/py3k/whatsnew/3.0.html

答案 1 :(得分:105)

这适用于Python 3.x和2.x:

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

答案 2 :(得分:38)

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

from six.moves import input

six是一个模块,用于修复许多2/3常见代码库的痛点。

答案 3 :(得分:16)

在Python 3.xx中,您只需要input()而不是raw_input()

答案 4 :(得分:13)

正如其他人所指出的那样,{3.0}中的raw_input函数已经重命名为input,你最好通过一本更新的书来更好地服务,但我想指出你可以通过更好的方式查看脚本的输出。

根据您的说明,我认为您正在使用Windows,您已保存了.py文件,然后双击它以运行它。弹出的终端窗口会在程序结束后立即关闭,因此您无法看到程序的结果。要解决此问题,您的图书建议添加raw_input / input语句,等待用户按Enter键。但是,正如您所见,如果出现问题,例如程序中的错误,该语句将不会被执行,窗口将关闭,而您无法看到出错的地方。您可能会发现使用命令提示符或IDLE更容易。

使用命令提示符

当您查看包含Python程序的文件夹窗口时,按住shift并右键单击窗口白色背景区域中的任意位置。弹出的菜单应包含“在此处打开命令窗口”条目。 (我认为这适用于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

...然后按Enter键。 (如果您收到“python”不是可识别命令的错误,请参阅http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96)程序运行完毕后,无论是否成功完成,窗口将保持打开状态,并再次显示命令提示符你输入另一个命令。如果要再次运行程序,可以按向上箭头调用您输入的上一个命令,然后按Enter键再次运行它,而不必每次都输入文件名。

使用IDLE

IDLE是一个安装了Python的简单程序编辑器。除了其他功能,它还可以在窗口中运行您的程序。右键单击.py文件,然后选择“在IDLE中编辑”。程序出现在编辑器中时,按F5或从“运行”菜单中选择“运行模块”。您的程序将在程序结束后保持打开的窗口中运行,并且您可以在其中输入Python命令以立即运行。

答案 5 :(得分:7)

Timmerman的解决方案在运行代码时运行良好,但如果您在使用pyflakes或类似的linter时不想出现Undefined name错误,则可以使用以下代码:

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

答案 6 :(得分:6)

这是我在脚本中放入的一段代码,我不想在py2 / 3不可知的环境中运行:

# 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_input而不是real_raw_input,但可能存在检查raw_input是否存在并且相应行为的模块。最好保持安全。

答案 7 :(得分:1)

可能不是最好的解决方案,但在我来到这里之前,我只是在飞行中继续工作而不需要快速学习。

def raw_input(x):
  input(x)

然后当我在我正在处理的脚本上运行raw_input('Enter your first name: ')时,它会像input()那样捕获它。

可能有理由不这样做,我还没有遇到过!

答案 8 :(得分:1)

下一个怎么样?应该允许您在Py​​thon2和Python3中同时使用raw_input或input和Python2的raw_input的语义(又名Python3的输入的语义)

# raw_input isn't defined in Python3.x, whereas input wasn't behaving like raw_input in Python 2.x
# this should make both input and raw_input work in Python 2.x/3.x like the raw_input from Python 2.x 
try: input = raw_input
except NameError: raw_input = input

答案 9 :(得分:0)

raw_input()函数已从Python 3.x中删除。 取输入python2曾经有两个函数,分别是input()和raw_input()

如果要在3.x中具有2.x的相同功能以获取输入参数,请访问此Wiki链接https://en.wikibooks.org/wiki/Python_Programming/Input_and_Output

答案 10 :(得分:0)

另一种方法是创建一个新函数。

import platform
def str_input(str=''):
    py_version = platform.python_version() # fetch the python version currently in use
    if int(py_version[0]) == 2:
       return raw_input(str) # input string in python2
    if int(py_version[0]) == 3:
       return input(str) # input string in python3

使用方法:

str_input("Your Name: ")

当我想创建可以在 python2 和 python3 中运行的脚本和输入时,我会使用它