繁体   English   中英

如何在 Python 3 中使用 raw_input?

[英]How do I use raw_input in Python 3?

在 Python 2 中:

raw_input()

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

NameError:未定义名称“raw_input”

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

来自Python 3.0 中的新增功能,内置部分第二项。

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

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

解决此问题的可靠方法是

from six.moves import input

6是一个修补许多 2/3 常见代码库痛点的模块。

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

正如其他人所指出的那样, raw_input函数在 Python 3.0 中已重命名为input ,并且您确实会得到一本更新的书更好的服务,但我想指出,有更好的方法来查看输出你的脚本。

根据您的描述,我认为您使用的是 Windows,您已经保存了一个.py文件,然后您双击它来运行它。 程序结束后弹出的终端窗口会立即关闭,因此您看不到程序的结果。 为了解决这个问题,你的书建议添加一个raw_input / input语句来等到用户按下回车键。 但是,正如您所看到的,如果出现问题,例如程序中的错误,该语句将不会被执行,并且窗口将关闭,而您无法看到出了什么问题。 您可能会发现使用命令提示符或 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 )当您的程序运行完成时,无论是否成功完成,窗口将保持打开状态,命令提示符将再次出现,供您键入另一个命令。 如果你想再次运行你的程序,你可以按向上箭头来调用你之前输入的命令,然后按回车再次运行它,而不必每次都输入文件名。

使用空闲

IDLE 是一个简单的程序编辑器,随 Python 一起安装。 除其他功能外,它还可以在窗口中运行您的程序。 右键单击您的.py文件并选择“在 IDLE 中编辑”。 当您的程序出现在编辑器中时,按 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 的存在并做出相应的行为。 最好保持安全。

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

def raw_input(x):
  input(x)

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

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

下面的那一个呢? 应该允许您在 Python2 和 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

通过创建一个新函数,您可以通过另一种方式做到这一点。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM