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

我正在使用 Python 3.1,无法raw_input“冻结”dos 弹出窗口。我正在阅读的书适用于 Python 2.5,而我正在使用 Python 3.1

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

4

9 回答 9

1132

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

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

于 2009-06-05T08:35:38.023 回答
125

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

# Fix Python 2.x.
try: input = raw_input
except NameError: pass
print("Hi " + input("Say something: "))
于 2011-09-06T14:59:18.150 回答
50

解决此问题的可靠方法是

from six.moves import input

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

于 2015-07-28T21:05:42.603 回答
16

正如其他人所指出的那样,该raw_input函数已input在 Python 3.0 中重命名为.

根据您的描述,我认为您使用的是 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 命令以立即运行。

于 2012-02-23T11:05:27.277 回答
8

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

try:
    import __builtin__
    input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
    pass
于 2013-08-20T09:54:29.387 回答
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 的存在并做出相应的行为。最好保持安全。

于 2014-09-22T11:02:21.813 回答
2

下面的那一个呢?应该允许您在 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
于 2020-07-10T00:44:41.057 回答
1

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

def raw_input(x):
  input(x)

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

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

于 2017-08-25T04:50:25.687 回答
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 中运行的脚本和输入时,我会使用它

于 2021-07-08T15:54:06.220 回答