python中input输出“Name 'XXX' is not defined问题
1.问题描述
代码如下:
x = input("Your name:")
print x
操作时如下:
Your name:liming
得到结果如下:
>>> x = input("Your name:")
liming
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'liming' is not defined
2.原因解释
出现上面的问题原因就在于没有好好理解python基本语法中的input()和raw_input()之间的关系:
在<<Beginning Python From Novice to Professional Second Edition>>一书中P21-22讲解如下:
input()会假设用户输入的是合法的Python表达式(其实就是也接收变量名)。如果以字符串作为输入的名字(手动给人家加上'x'或者"x"),程序运行是没有问题的.
即如我们将运行时操作改为:
-- -- -- -- -- -- -- -- -- -- -- -- -- --
Your name:'liming'
print x
liming
-- -- -- -- -- -- -- -- -- -- -- -- -- --
Your name:"liming"
print x
liming
-- -- -- -- -- -- -- -- -- -- -- -- -- --
这两者都是合法且可以执行的严格格式.
但是如果使用:
raw_input()函数
它会把所有的输入当做原始数据(raw data),也就是不接受变量,会直接将其转换为字符串赋值
x = raw_input("Your name:")
print x
得到的操作和结果如下:
C:\Python27\python.exe "G:/Python_Space/hello world.py"
Your name:liming
liming
Process finished with exit code 0
3.结果分析
当前这种问题只会出现在Python2.x的环境中,且input()书写的时候完全严格定义是引用还是实体。
在我现在的工作中已经切换到Python3.x, raw_input()已近完全替换了input()的功能,不再接收变量作为入参,也就不再会有上面的问题。