使用Python raw_input提示返回NameError

时间:2015-05-17 18:35:19

标签: python python-2.7 nameerror

我正在尝试创建一个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

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

2 个答案:

答案 0 :(得分:3)

input相当于eval(raw_input)。在你的例子中,它完全是多余的。只需将其删除并仅保留raw_input

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

编辑:
要回答评论中的问题,input接受字符串并尝试将其作为python表达式进行评估(有关详细信息,请参阅eval's documentation)。因为&#34;竞争性饮食&#34;不是你已经定义的变量,它不能被评估,因此NameError

答案 1 :(得分: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是合适的。