我完全迷失了为什么这不起作用。应该准确地工作吧?
UserName = input("Please enter your name: ")
print ("Hello Mr. " + UserName)
raw_input("<Press Enter to quit.>")
我得到了这个例外:
Traceback (most recent call last):
File "Test1.py", line 1, in <module>
UserName = input("Please enter your name: ")
File "<string>", line 1, in <module>
NameError: name 'k' is not defined
它说NameError 'k'
,因为我在测试期间写了'k'
作为输入。我已经读过print语句曾经没有括号但是已经被弃用了吗?
答案 0 :(得分:13)
请勿在2.x中使用input()
。请改用raw_input()
。总是
答案 1 :(得分:12)
在Python 2.x中,input()
“评估”输入的内容。(参见help(input)
)。因此,当您键入k
时,input()
会尝试查找k
。由于未定义,因此会引发NameError
异常。
在Python 2.x中使用raw_input()
。在3.0x中,input()
是固定的。
如果你真的想使用input()
(这是不可取的),那么引用你的k
变量如下:
>>> UserName = input("Please enter your name: ")
Please enter your name: "k"
>>> print UserName
k
答案 2 :(得分:0)
接受的答案提供了正确的解决方案,@ ghostdog74给出了异常的原因。我认为,一步一步地看到为什么这会引发NameError
(而不是像ValueError这样的其他东西)可能会有所帮助:
根据Python 2.7文档,input()
evaluates您输入的内容,基本上您的程序就变为:
username = input('...')
# => translates to
username = eval(raw_input('...'))
假设输入为bob
,则变为:
username = eval('bob')
由于eval()
执行'bob'就好像它是一个Python表达式,你的程序就变成了这个:
username = bob
=> NameError
print ("Hello Mr. " + username)
你可以让我输入“bob”(带引号),因为那时程序是有效的:
username = "bob"
print ("Hello Mr. " + username)
=> Hello Mr. bob
您可以自己完成Python REPL中的每个步骤来尝试一下。请注意,异常是在第一行引发的,而不是在print语句中引发的。