我如何在Python 3中使用raw_input

Lon*_*ice 523 python python-3.x

import sys
print(sys.platform)
print(2**100)
raw_input()
Run Code Online (Sandbox Code Playgroud)

我正在使用Python 3.1并且无法raw_input"冻结"dos弹出窗口.我正在阅读的书是Python 2.5,我使用的是Python 3.1

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

bal*_*pha 969

raw_input() 被重命名为 input()

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

  • 最初有一个函数input(),它起到了当前eval(input())的作用.这是Python缺乏安全意识时的遗留问题.这种变化简化了语言.另请参阅"导入此"以获得更深入的解释.您是否更愿意使用死语言?周围有很多人. (52认同)
  • 我也在学习python,发现`input()`和`raw_input()`之间存在一个区别.`a = input()`将获取用户输入并将其置于正确的类型中.例如:如果用户输入5,那么`a`中的值是整数5.`a = raw_input()`将获取用户输入并将其作为字符串.例如:如果用户输入5,则"a"中的值为字符串"5"而不是整数.认为这对像我这样的python新手来说可能是个好消息. (9认同)
  • @VishnuNarang是的,这在Python 2中是正确的.但是在Python 3中,这种行为发生了变化,并且输入执行了raw_input在Python 2中所做的事情. (9认同)
  • @balpha:刚刚验证过.你是对的.我有python 2.7(无法编辑答案,提到...) (4认同)
  • @meawoppl从python 2迁移到3意味着要崩溃。这并不意味着一定如此。语言可以发展而不会死,也不会更改功能签名。如果您没有全局功能,那么它将有所帮助。从其他语言的事后回顾开始。等删除功能也不在桌子上。 (3认同)

Cee*_*man 110

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

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

  • 我得到了[范围问题](http://docs.python.org/3/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value )用这种方法.修复了调用函数顶部的"全局输入". (4认同)
  • Python 3没有名为`__builtin__`的模块. (3认同)
  • `getattr(__ builtins __,'raw_input',input)`在Python 2.7.2中导入时返回默认值. (3认同)

tac*_*ell 44

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

from six.moves import input
Run Code Online (Sandbox Code Playgroud)

是一个模块,它修复了许多2/3常见代码库的痛点.

  • 好主意……如果你做`from Six.moves import input as raw_input`,你可以在你的脚本中保留`raw_input`并使用两个Python版本运行。 (3认同)

Wee*_*ble 15

正如其他人所指出的那样,这个raw_input函数已经input在Python 3.0中被重命名了,你最好能通过一本更新的书得到更好的服务,但是我想指出有更好的方法可以看到你脚本的输出.

根据您的描述,我认为您正在使用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>_
Run Code Online (Sandbox Code Playgroud)

要运行程序,请键入以下内容(替换您的脚本名称):

    python myscript.py
Run Code Online (Sandbox Code Playgroud)

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

使用IDLE

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

  • 我不确定我理解.问题是特定于Windows的.它谈到了"DOS弹出窗口".IDLE是作为Python的一部分安装的,但是一些分销商可能会将其分离出来.例如,在Ubuntu中,您似乎必须将其作为单独的包安装.答案已经提出了一种与提问者不同的方法,所以我宁愿不再添加切线.FWIW我在家里使用Linux,只使用我必须工作的Windows. (3认同)

jma*_*son 7

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

try:
    import __builtin__
    input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
    pass
Run Code Online (Sandbox Code Playgroud)


Che*_*aKL 5

这是我在脚本中放入的一段代码,我不想在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)
Run Code Online (Sandbox Code Playgroud)

现在你可以使用real_raw_input.它非常昂贵,但又简短易读.使用原始输入通常是耗时的(等待输入),所以它并不重要.

理论上,您甚至可以分配raw_input而不是real_raw_input,但可能存在检查raw_input是否存在并且相应行为的模块.最好保持安全.