在Python 2中:

raw_input()

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

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

其他回答

下面是我放在脚本中的一段代码,我不想在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是否存在并进行相应的操作。还是小心为妙。

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

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

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

from six.moves import input

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

这在python3中有效。X和2.x:

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

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

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