为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中的用户输入后,“NameError:name‘未定义”

在Python中的用户输入后,“NameError:name‘未定义”

PIPIONE 2019-06-27 15:44:17
在Python中的用户输入后,“NameError:name‘未定义”我完全不明白为什么这不管用。应该准确地工作,对吧?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'作为我测试中的输入。我读过打印语句曾经没有括号,但这已经被废弃了,对吗?
查看完整描述

3 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

不使用input()在2.x。使用raw_input()相反。一直都是。


查看完整回答
反对 回复 2019-06-27
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

在Python2.x中,input()“计算”键入的内容。(见help(input))。因此,当您输入kinput()想找出什么k是。因为没有定义它,所以它会引发NameError例外。

使用raw_input()在Python2.x中。在3.0x,input()是固定的。

如果你真的想用input()(这确实是不可取的),然后引用k变量如下:

>>> UserName = input("Please enter your name: ")
Please enter your name: "k"
>>> print UserName
k


查看完整回答
反对 回复 2019-06-27
?
Qyouu

TA贡献1786条经验 获得超11个赞

可接受的答案提供了正确的解决方案,@ghstdog74给出了异常的原因。我想,一步地了解为什么这会引发一个NameError(而不是其他东西,比如ValueError):

根据Python2.7文档,input()评价您输入的内容,所以本质上是您的程序变成如下:

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

您可以通过在PythonREPL你自己。请注意,异常已在第一行引发,而不是在print语句中引发。


查看完整回答
反对 回复 2019-06-27
  • 3 回答
  • 0 关注
  • 2865 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信