NameError 返回并带有 Python raw_input 提示[重复]

问题描述 投票:0回答:2

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

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

hobbies = []

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

在用户输入提示处输入响应后,假设我的响应是“竞争性饮食”,我在终端中收到以下错误:

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

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

python python-2.7 nameerror
2个回答
3
投票

input
相当于
eval(raw_input)
。在你的例子中它是完全多余的。只需放下它并仅保留
raw_input

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

编辑:
为了回答评论中的问题,

input
获取字符串并尝试将其计算为Python表达式(有关详细信息,请参阅
eval
的文档
)。由于“竞争性饮食”不是您已经定义的变量,因此无法对其进行评估,因此
NameError


1
投票

您只需要

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
是合适的。

© www.soinside.com 2019 - 2024. All rights reserved.