我如何在Python 3中使用raw_input
import sys print (sys.platform) print (2 ** 100) raw_input( )
我正在使用Python 3.1,无法获取raw_input来“冻结”dospopup窗口。 我正在阅读的书是2.5,而我正在使用3.1
我该怎么办才能解决这个问题?
raw_input()
被重命名为input()
这适用于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
六是一个模块,其中2/3的通用代码基础痛点的许多补丁。
正如其他人所指出的那样, raw_input
函数已经被重新命名为Python 3.0中的input
,而且你可以更好地服务于更新的书,但是我想指出的是,有更好的方法可以看到输出你的脚本。
从您的描述中,我认为您使用的是Windows,您已经保存了一个.py
文件,然后双击它来运行它。 一旦程序结束,popup的terminal窗口closures,所以你不能看到你的程序的结果是什么。 为了解决这个问题,你的书build议添加一个raw_input
/ input
语句,等到用户按下回车键。 然而,正如你所看到的,如果出现错误,例如程序中出现错误,那么该语句将不会被执行,并且窗口将会closures,而不会看到错误。 您可能会发现使用命令提示符或IDLE更容易。
使用命令提示符
当您查看包含Python程序的文件夹窗口时,按住Shift并右键单击窗口白色背景区域中的任意位置。 popup的菜单应该包含一个条目“在这里打开命令窗口”。 (我认为这适用于Windows Vista和Windows 7.)这将打开一个命令提示符窗口,如下所示:
Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\Weeble\My Python Program>_
要运行你的程序,input以下内容(replace你的脚本名称):
python myscript.py
…然后按回车。 (如果你得到一个错误,“python”不是一个可以识别的命令,请参阅http://showmedo.com/videotutorials/video?name=960000&fromSeriesID=96 )当你的程序运行完毕,是否成功完成,窗口将保持打开并且命令提示符将再次出现,以便您键入另一个命令。 如果你想再次运行你的程序,你可以按向上的箭头来调用你input的前一个命令,然后按回车再次运行它,而不是每次input文件名。
使用IDLE
IDLE是一个简单的程序编辑器,随Python一起安装。 其他function可以在窗口中运行您的程序。 右键单击.py
文件,然后select“在IDLE中编辑”。 当程序出现在编辑器中时,按F5或从“运行”菜单中select“运行模块”。 您的程序将在程序结束后保持打开的窗口中运行,并且您可以在其中inputPython命令以立即运行。
在Python 3.xx中,你只需要input()
而不是raw_input()
Timmerman的解决scheme在运行代码时效果很好,但是如果在使用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了。 这是相当昂贵的,但简短和可读。 使用原始input通常花费时间(等待input),所以这不重要。
理论上,你甚至可以分配raw_input而不是real_raw_input,但是可能有一些模块检查raw_input是否存在,并相应地运行。 最好保持安全。
可能不是最好的解决办法,但是在我来到这里之前,我只是把这个工作做好,继续工作,不用快速rest一下。
def raw_input(x): input(x)
然后,当我在我正在处理的脚本上运行raw_input('Enter your first name: ')
时,它会像input()
那样捕获它。
可能有一个理由不这样做,我还没有遇到!
2.x和3.x之间的跳转不是太极端,但是它确实改变了一些东西。 raw_input现在只是input,如果你想使用旧的input只是做:
eval(input())
所以只要忘记原料:)