Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python input()错误-NameError:name'';没有定义_Python_Python 2.7_Input_Nameerror - Fatal编程技术网

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)