在Python 2中:

raw_input()

在Python 3中,我得到一个错误:

name 'raw_input'没有定义


当前回答

Timmerman的解决方案在运行代码时工作得很好,但如果你不想在使用pyflakes或类似的linter时得到未定义的名称错误,你可以使用以下方法:

try:
    import __builtin__
    input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
    pass

其他回答

Timmerman的解决方案在运行代码时工作得很好,但如果你不想在使用pyflakes或类似的linter时得到未定义的名称错误,你可以使用以下方法:

try:
    import __builtin__
    input = getattr(__builtin__, 'raw_input')
except (ImportError, AttributeError):
    pass

另一种方法是,创建一个新函数。

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中运行的脚本和输入时,我会使用这个方法

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

Python 3.0更新:内置程序节第二项。

下面这个怎么样?应该允许您使用raw_input或Python2和Python3中的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

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

from six.moves import input

Six是一个可以修补2/3常见代码基础痛点的模块。