我如何使用raw_input在Python 3?

在Python 2中:

raw_input()

在Python 3中,我得到一个错误:

name 'raw_input'没有定义

1039255 次浏览

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

Python 3.0内置功能更新一节第二个项目。

这在python3中有效。X和2.x:

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

正如其他人所指出的,raw_input函数在Python 3.0中已被重命名为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是一个简单的程序编辑器,随Python一起安装。在其他功能中,它可以在窗口中运行程序。右键单击.py文件,选择“在空闲中编辑”。当程序出现在编辑器中时,按F5或从“运行”菜单中选择“运行模块”。程序将在程序结束后保持打开的窗口中运行,您可以在其中输入Python命令立即运行。

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

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

下面是我放在脚本中的一段代码,我不想在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是否存在并进行相应的操作。还是小心为妙。

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

from six.moves import input

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

可能不是最好的解决方案,但在我来这里之前,我只是在飞行中继续工作,没有从学习中快速休息。

def raw_input(x):
input(x)

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

也许有一个理由不这样做,我还没有遇到!

下面这个怎么样?应该允许您使用raw_input或Python2和Python3中的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

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

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中运行的脚本和输入时,我会使用这个方法