Python input()错误-NameError:name'';没有定义
我尝试运行此简单脚本时出错:Python input()错误-NameError:name'';没有定义,python,python-2.7,input,nameerror,Python,Python 2.7,Input,Nameerror,我尝试运行此简单脚本时出错: input_variable = input("Enter your name: ") print("your name is" + input_variable) 假设我输入“dude”,我得到的错误是: line 1, in <module> input_variable = input("Enter your name: ") File "<string>"
input_variable = input("Enter your name: ")
print("your name is" + input_variable)
假设我输入“dude”,我得到的错误是:
line 1, in <module>
input_variable = input("Enter your name: ")
File "<string>", line 1, in <module>
NameError: name 'dude' is not defined
第1行,在
输入变量=输入(“输入您的姓名:”)
文件“”,第1行,在
NameError:未定义名称“dude”
我使用Python 2.7运行这些脚本。您运行的是Python 2,而不是Python 3。要在Python2中实现这一点,请使用
raw\u input
input_variable = raw_input ("Enter your name: ")
print ("your name is" + input_variable)
TL;DR
Python2.7中的input
函数,以Python表达式的形式计算输入的值。如果您只是想读取字符串,那么在Python2.7中使用raw\u input
函数,该函数不会对读取的字符串求值
print("Enter your name: ")
x = raw_input()
print("Hello, "+x)
如果您使用的是Python3.x,raw\u input
已重命名为input
。引用
raw\u input()
被重命名为input()
。也就是说,新的input()
函数从sys.stdin
中读取一行,并返回它,同时去掉尾随的换行符。如果输入过早终止,则会引发eoferor
。要获取input()
的旧行为,请使用eval(input())
在Python 2.7中,有两个函数可用于接受用户输入。一个是,另一个是。你可以把它们之间的关系想成如下
input = eval(raw_input)
考虑下面的代码以更好地理解这一点
>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'
input
接受来自用户的字符串,并在当前Python上下文中计算该字符串。当我键入dude
作为输入时,它发现dude
绑定到值fourtheye
,因此求值结果成为fourtheye
,并分配给input\u变量
如果我输入了当前python上下文中不存在的其他内容,它将失败,并出现namererror
>>> 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将把它作为函数调用表达式进行计算,并执行它。如果您正在以提升的权限执行Python,/etc/hosts
文件将被删除。看,这有多危险
为了演示这一点,让我们再次尝试执行input
函数
>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude
现在,当执行input(“输入您的名字”)
时,它会等待用户输入,并且用户输入是一个有效的Python函数调用,因此也会被调用。这就是为什么我们看到再次输入您的姓名:
再次提示
因此,您最好使用原始输入
函数,如下所示
input_variable = raw_input("Enter your name: ")
如果需要将结果转换为其他类型,则可以使用适当的函数转换raw\u input
返回的字符串。例如,要将输入读取为整数,请使用int
函数,如中所示
在python 3.x中,只有一个函数用于获取用户输入,该函数被调用,这相当于python 2.7的原始输入
因为您是为python 3.x编写的,所以您需要从以下内容开始编写脚本:
input_variable = raw_input ("Enter your name: ")
print ("your name is" + input_variable)
#!/usr/bin/env python3
如果您使用:
#!/usr/bin/env python
它将默认为Python2.x。如果没有以#开头的内容,这些内容将出现在脚本的第一行!(又名shebang)
如果您的脚本仅从以下内容开始:
#! python
然后您可以将其更改为:
#! python3
虽然这种较短的格式只被少数程序识别,例如launcher,但它不是最佳选择
前两个示例的使用范围更广,有助于确保您的代码能够在安装了Python的任何机器上运行。对于可能遇到此问题的任何其他人来说,即使您包含#/usr/bin/env python3
在脚本的开头,如果文件不可执行,则忽略shebang
要确定文件是否可执行,请执行以下操作:
- 从命令行运行
/filename.py
- 如果您获得
-bash:./filename.py:权限被拒绝
,请运行chmod a+x filename.py
- 再次运行
/filename.py
如果您已包括导入系统;print(sys.version)
正如Kevin所建议的,现在您将看到脚本由python3解释您可以更改您在IDE中使用的python,如果您已经下载了python3.x,那么切换它应该不会太困难。但是您的脚本在Python3.x上运行得很好,我只想更改一下
print ("your name is" + input_variable)
到
因为用逗号打印时,在您的名字和用户输入的内容之间有一个空格。而且:如果您使用的是2.7,只需使用raw\u input
而不是input 您可以执行以下任一操作:
x = raw_input("enter your name")
print "your name is %s " % x
或:
适用于python 3及以上版本
s = raw_input()
它将在pycharm IDE上解决这个问题
如果您是在在线网站上解决问题,请使用:
s = input()
您应该使用raw_input
,因为您使用的是python-2.7。当您对变量(例如:s=input('Name:')
)使用input()
)时,它将在Python环境中执行命令,而不保存您在变量(s
)上编写的内容,如果未定义您编写的内容,则会创建错误
raw\u input()
将正确保存您在变量上写入的内容(例如:f=raw\u input('Name:')
),并且它将不会在Python环境中执行它,而不会产生任何可能的错误:
input_variable = raw_input('Enter Your Name : ')
print("Your Name Is : " + (input_variable))
您必须以单引号或双引号输入输入
Ex:'dude' -> correct
dude -> not correct
我们使用的是同时适用于python 2和python 3的以下内容
#Works in Python 2 and 3:
try: input = raw_input
except NameError: pass
print(input("Enter your name: "))
与前几次相比,这是一次很好的贡献
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: "))
输入你的名字:乔
('Hi'、'Joe'、<type'str'>)
嗨,乔,再见
你的名字:乔
乔
谢谢 我在一个模块中也遇到了这个问题,该模块应该与python 2.7和3.7兼容
我发现解决此问题的方法是导入:
from six.moves import input
这修复了两个口译员的可用性
你可以阅读更多关于
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: "))
Enter your name: Joe
('Hi ', 'Joe', <type 'str'>)
Hi Joe, bye
Your name: Joe
Joe
from six.moves import input
print("Enter your name: ")
x = raw_input()
print("Hello, "+x)
def input_compatible(prompt=None):
try:
input_func = raw_input
except NameError:
input_func = input
return input_func(prompt)