当前位置: 首页 > 知识库问答 >
问题:

input()错误-名称错误:未定义名称“…”

祁绪
2023-03-14

我得到一个错误,当我试图运行这个简单的脚本:

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

我正在运行MacOSX10.9.1,我正在使用安装了Python3.3的PythonLauncher应用程序来运行脚本。

共有3个答案

金和雅
2023-03-14

由于您是为Python 3.x编写的,因此您需要以以下内容开始编写脚本:

#!/usr/bin/env python3

如果您使用:

#!/usr/bin/env python

它将默认为Python2.x。如果没有以#开头的内容,这些内容将出现在脚本的第一行!(又名shebang)。

如果您的脚本只是以:

#! python

然后您可以将其更改为:

#! python3

虽然这种较短的格式只被少数程序识别,比如启动器,所以它不是最好的选择。

前两个示例使用得更广泛,有助于确保您的代码可以在安装了Python的任何机器上运行。

向苗宣
2023-03-14

您运行的是Python 2,而不是Python 3。要在Python2中实现这一点,请使用raw\u input

input_variable = raw_input ("Enter your name: ")
print ("your name is" + input_variable)
归和惬
2023-03-14

TL; DR

Python 2.7中的输入函数,计算任何输入,作为Python表达式。如果你只是想读取字符串,那么使用Python 2.7中的raw_input函数,它不会计算读取的字符串。

如果使用Python 3. x,raw_input已重命名为输入。引用Python 3.0发布说明,

raw\u input()被重命名为input()。也就是说,新的input()函数从sys.stdin中读取一行,并返回它,同时去掉尾随的换行符。如果输入过早终止,则会引发eoferor。要获取input()的旧行为,请使用eval(input())

在Python2.7中,有两个函数可用于接受用户输入。一个是input,另一个是raw\u input。你可以把它们之间的关系想成如下

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 2.7的输入的安全注意事项

因为无论评估何种用户类型,它都会带来安全问题。例如,如果您已经使用导入操作系统在程序中加载了操作系统模块,然后用户输入

os.remove("/etc/hosts")

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_input返回的字符串。例如,要将输入读取为整数,请使用int函数,如本答案所示。

在Python3.x中,只有一个函数可以获取用户输入,称为input,它相当于Python2.7的raw\u input

 类似资料:
  • 问题内容: 好的,所以我正在用python编写成绩检查代码,我的代码是: 当我通过python编译器运行它并选择时,出现一条错误消息: “ NameError:未定义名称’n’” 当我选择我再有是问题,但是当我做别的事情,代码运行正常。 任何帮助是极大的赞赏, 谢谢。 问题答案: 在Python 2中使用来获取字符串,在Python 2中等效于。 因此,当您输入类似的内容时,它会认为您正在寻找一个

  • 我正在使用cogs来缩短和组织我的discord机器人。然而,在尝试“事件”cog时,我遇到了一个名称错误,即没有定义changePlaying,尽管它实际上是关于on_ready命令的 我忘了输入discord。ext并因此导入了该文件。B:我已经尝试过在changePlaying事件中更改可能状态列表的位置 嗯,我认为很明显预期的结果是什么,但要澄清机器人应该启动。它确实在线,并听取命令,但状

  • 我对不和谐是新手。py并遵循有关齿轮的教程。我遵循了教程告诉我的所有内容,但在运行命令时出现了名称错误。 代码如下: 当我在discord消息框中键入时,我得到了这个回溯 回溯(最近一次调用):文件“C:\Users\bryan\source\repos\discord\u music\u bot\env\lib\site packages\discord\ext\commands\bot.py”

  • 我只是在复制ProductHunt。com网站和地址的网址,我得到了错误的名称错误!当我输入'localhost:8000/accounts/signup'时,它会将我带到一个html页面,这是我为测试所做的!主URL。py看起来像: 因此,它会转到帐户文件夹urls.py看起来像:从django.urls导入路径,包括从。导入视图 然后是视图。py看起来像:来自django。快捷方式导入渲染 至

  • 问题内容: 当我尝试运行此简单的python脚本时出现错误: 假设我输入“花花公子”,我得到的错误是: 我正在运行Mac OS X 10.9.1,并且正在使用python 3.3安装随附的Python Launcher应用程序来运行脚本。 编辑:我意识到我以某种方式运行这些脚本与2.7。我想真正的问题是如何在3.3版中运行脚本?我以为,如果将脚本拖放到应用程序文件夹中Python 3.3文件夹内的

  • 问题内容: 指令代码 HTML 我遇到此错误:。怎么了? 问题答案: 在作用域中是可访问的,因此您可以在控制器或链接阶段或模板中进行访问。一个简单的解决方案是将模板更改为