input() error - NameError: name '…' is not defined
当我尝试运行这个简单的python脚本时,我遇到了一个错误:
1 2 | input_variable = input ("Enter your name:") print ("your name is" + input_variable) |
假设我输入"dude",我得到的错误是:
1 2 3 4 | line 1, in <module> input_variable = input ("Enter your name:") File"<string>", line 1, in <module> NameError: name 'dude' is not defined |
我运行的是macosx10.9.1,我使用的是安装了python 3.3的python启动器应用程序来运行脚本。
编辑:我意识到我在用2.7运行这些脚本。我想真正的问题是如何在3.3版中运行我的脚本?我想,如果我把脚本拖到应用程序文件夹中python 3.3文件夹中的python launcher应用程序上面,它将使用3.3启动脚本。我想这个方法仍然使用2.7启动脚本。那么我如何使用3.3呢?
DR
python 2.7中的
如果您使用的是python 3.x,那么
raw_input() was renamed toinput() . That is, the newinput() function reads a line fromsys.stdin and returns it with the trailing newline stripped. It raisesEOFError if the input is terminated prematurely. To get the old behavior ofinput() , useeval(input())
在Python2.7中,有两个函数可以用来接受用户输入。一个是
1 | input = eval(raw_input) |
考虑下面的代码以更好地理解这一点
1 2 3 4 5 | >>> dude ="thefourtheye" >>> input_variable = input("Enter your name:") Enter your name: dude >>> input_variable 'thefourtheye' |
如果我输入当前python上下文中没有的其他内容,那么
1 2 3 4 5 6 | >>> input("Enter your name:") Enter your name: dummy Traceback (most recent call last): File"<input>", line 1, in <module> File"<string>", line 1, in <module> NameError: name 'dummy' is not defined |
python 2.7的
因为无论评估什么用户类型,它也会带来安全问题。例如,如果您已经使用
1 | os.remove("/etc/hosts") |
这将由python作为函数调用表达式进行计算并执行。如果您以提升的权限执行python,那么将删除
为了证明这一点,让我们再次尝试执行
1 2 3 4 | >>> dude ="thefourtheye" >>> input("Enter your name:") Enter your name: input("Enter your name again:") Enter your name again: dude |
现在,当执行
所以,你最好使用
1 | input_variable = raw_input("Enter your name:") |
如果需要将结果转换为其他类型,那么可以使用适当的函数来转换
在python 3.x中,只有一个函数可以获取用户输入,称为
您运行的是python 2,而不是python 3。为了在python 2中工作,请使用
1 2 | input_variable = raw_input ("Enter your name:") print ("your name is" + input_variable) |
因为您是为python 3.x编写的,所以您需要从以下内容开始编写脚本:
1 | #!/usr/bin/env python3 |
如果使用:
1 | #!/usr/bin/env python |
它将默认为python 2.x。如果没有以开头的内容,这些内容将出现在脚本的第一行。(又名舍邦)。
如果脚本只是以以下内容开始:
1 | #! python |
然后您可以将其更改为:
1 | #! python3 |
虽然这种较短的格式只能被一些程序识别,例如启动器,所以它不是最佳选择。
前两个示例的使用范围更广,有助于确保您的代码可以在安装了Python的任何计算机上工作。
您应该使用
1 2 | input_variable = raw_input('Enter Your Name : ') print("Your Name Is :" + (input_variable)) |
对于python 3及更高版本
1 | s = raw_input() |
它将解决Pycharm IDE上的问题如果您正在在线网站上解决黑客排名问题,请使用:
1 | s = input() |
1 2 | input_variable = input ("Enter your name:") print ("your name is" + input_variable) |
您必须输入单引号或双引号
1 2 3 | Ex:'dude' -> correct dude -> not correct |
我们使用的是同时适用于python 2和python 3的以下代码
1 2 3 4 | #Works in Python 2 and 3: try: input = raw_input except NameError: pass print(input("Enter your name:")) |
你可以这样做:
1 2 | x = raw_input("enter your name") print"your name is %s" % x |
或:
1 2 | x = str(input("enter your name")) print"your name is %s" % x |
对于可能遇到此问题的任何其他人,结果表明,即使在脚本开头包含
要确定文件是否可执行,请执行以下操作:
- 从命令行运行
./filename.py 。 - 如果你得到
-bash: ./filename.py: Permission denied ,运行chmod a+x filename.py 。 - 再次运行
./filename.py 。
如果你像凯文建议的那样加入了
前功尽弃。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import sys; print(sys.version) def ingreso(nombre): print('Hi ', nombre, type(nombre)) def bienvenida(nombre): print("Hi"+nombre+", bye") nombre = raw_input("Enter your name:") ingreso(nombre) bienvenida(nombre) #Works in Python 2 and 3: try: input = raw_input except NameError: pass print(input("Your name:")) |
1 2 3 4 5 6 | Enter your name: Joe ('Hi ', 'Joe', <type 'str'>) Hi Joe, bye Your name: Joe Joe |
谢谢!
如果您已经下载了python 3.x,那么可以更改您在IDE中使用的python,这不应该太难切换。但是你的脚本在python 3.x上运行得很好,我只想更改一下
1 | print ("your name is" + input_variable) |
到
1 | print ("your name is", input_variable) |
因为它使用逗号在