import sys
print(sys.platform)
print(2**100)
raw_input()
我正在使用Python 3.1,无法raw_input
“冻结” dos弹出窗口。我正在阅读的书是针对Python 2.5的,而我正在使用Python 3.1
我应该怎么做才能解决这个问题?
import sys
print(sys.platform)
print(2**100)
raw_input()
我正在使用Python 3.1,无法raw_input
“冻结” dos弹出窗口。我正在阅读的书是针对Python 2.5的,而我正在使用Python 3.1
我应该怎么做才能解决这个问题?
Answers:
从Python 3开始,raw_input()
已重命名为input()
。
摘自Python 3.0的新增功能,“内置”部分的第二项。
input()
和之间有一个区别raw_input()
。 a = input()
将接受用户输入并将其输入正确的类型。例如:如果用户键入5,则in中的a
值为整数5。 a = raw_input()
将采用用户输入并将其作为字符串输入。例如:如果用户键入5,则in中的值a
是字符串'5',而不是整数。以为这对像我这样的python新手来说可能是个好信息。
这适用于Python 3.x和2.x:
# Fix Python 2.x.
try: input = raw_input
except NameError: pass
print("Hi " + input("Say something: "))
global input
调用函数顶部的a修复了该问题。
import __builtin__; input = getattr(__builtin__, 'raw_input', input)
__builtin__
。
__builtin__
被重命名为。在CPython中builtins
都可用__builtins__
。
getattr(__builtins__, 'raw_input', input)
在Python 2.7.2中导入时,返回默认值。
正如其他人所指出的那样,该raw_input
函数已input
在Python 3.0中重命名为,确实可以得到一本更新的书来更好地服务,但我想指出的是,有更好的方法可以查看脚本的输出。
根据您的描述,我认为您正在使用Windows,已经保存了一个.py
文件,然后双击它来运行它。程序结束后,弹出的终端窗口将立即关闭,因此您看不到程序的结果是什么。为了解决这个问题,您的书建议添加raw_input
/input
语句,直到用户按下Enter键。但是,正如您所看到的,如果出现问题(例如程序中的错误),则该语句将不会执行,并且在您看不到问题出在哪里之前,该窗口将关闭。您可能会发现使用命令提示符或IDLE更容易。
当您查看包含Python程序的文件夹窗口时,请按住shift键并右键单击窗口白色背景区域中的任意位置。弹出的菜单应包含“此处打开命令窗口”条目。(我认为这适用于Windows Vista和Windows7。)这将打开一个命令提示符窗口,如下所示:
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
文件,然后选择“在IDLE中编辑”。当您的程序出现在编辑器中时,按F5或从“运行”菜单中选择“运行模块”。程序将在程序结束后的窗口中运行,您可以在其中输入Python命令以立即运行。
pythonw -m idlelib.idle
Timmerman的解决方案在运行代码时效果很好,但是如果您不想Undefined name
在使用pyflakes或类似的linter时出错,则可以使用以下代码:
try:
import __builtin__
input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
pass
Redefining built-in 'input' (redefined-builtin)
,Unable to import '__builtin__' (import-error)
,Invalid constant name "input" (invalid-name)
。
flake8
还是pyflakes
以不占用你所有的一天无意义的警告。
这是我在脚本中输入的一段代码,我不想在与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的存在并相应地运行。最好保持安全。