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
我应该怎么做才能解决这个问题?
从 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: "))
正如其他人所指出的那样,该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 命令以立即运行。
Timmerman 的解决方案在运行代码时效果很好,但如果您不想Undefined name
在使用 pyflakes 或类似的 linter 时出错,您可以使用以下代码:
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 的存在并做出相应的行为。最好保持安全。
下面的那一个呢?应该允许您在 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
可能不是最好的解决方案,但在我来这里之前,我只是在飞行中做这个以继续工作,而不会从学习中快速休息。
def raw_input(x):
input(x)
然后,当我raw_input('Enter your first name: ')
在我正在处理的脚本上运行时,它会照常捕获它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 中运行的脚本和输入时,我会使用它