NameError 返回 Python raw_input 提示

NameError returned with Python raw_input prompt

我正在尝试创建一个 for 循环,提示用户输入爱好 3 次,然后将每一次附加到爱好。

这是我到目前为止的想法:

hobbies = []

for tries in range(3):
    hobby = raw_input(input("what's your favorite hobby?: "))
    hobbies.append(hobby)

我在用户输入提示下输入响应后,假设我的响应是 "competitive eating",我在终端中收到以下错误:

Traceback (most recent call last):
  File "hobbyprompt.py", line 12, in <module>
    hobby = raw_input(input("what's your favorite hobby?: "))
  File "<string>", line 1, in <module>
NameError: name 'competitive eating' is not defined

我确定我在这里犯了一个非常愚蠢的错误,但我似乎无法弄清楚我做错了什么。

您只需要 raw_input,而不是 input 后跟 raw_input。使用

hobby = raw_input("what's your favorite hobby?: ")

在 python 3.x 中,input 执行 raw_input 在以前版本中执行的操作。但是在 Python 3 之前,input 除了从 stdin 读取一行之外,还对该行求值,就好像它是一个有效的 Python 表达式一样。 raw_input 是备选方案,因此您应该使用其中之一,而不是两者。这里,raw_input是合适的。

input 等价于 eval(raw_input)。在您的示例中它是完全多余的。放下它并仅保留 raw_input:

hobby = raw_input("what's your favorite hobby?: ")

编辑:
为了回答评论中的问题,input 获取字符串并尝试将其计算为 python 表达式(有关详细信息,请参阅 eval's documentation)。由于 "competitive eating" 不是您已经定义的变量,因此无法对其进行评估,因此 NameError.