在Python 2中:

raw_input()

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

name 'raw_input'没有定义


当前回答

下面这个怎么样?应该允许您使用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

其他回答

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

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

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

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

可能不是最好的解决方案,但在我来这里之前,我只是在飞行中继续工作,没有从学习中快速休息。

def raw_input(x):
  input(x)

然后,当我在我正在处理的脚本上运行raw_input('输入您的第一个名字:')时,它会像input()一样捕获它。

也许有一个理由不这样做,我还没有遇到!

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

下面这个怎么样?应该允许您使用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