当前位置: 首页 > 面试题库 >

Python-input()error-NameError:未定义名称“…”

郭阳泽
2023-03-14
问题内容

当我尝试运行此简单的python脚本时出现错误:

input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)

假设我输入“花花公子”,我得到的错误是:

line 1, in <module>
input_variable = input ("Enter your name: ")
File "<string>", line 1, in <module>
NameError: name 'dude' is not defined

我正在运行Mac OS X 10.9.1,并且正在使用python 3.3安装随附的Python Launcher应用程序来运行脚本。

编辑:我意识到我以某种方式运行这些脚本与2.7。我想真正的问题是如何在3.3版中运行脚本?我以为,如果将脚本拖放到应用程序文件夹中Python 3.3文件夹内的Python Launcher应用程序之上,它将使用3.3启动脚本。我猜这种方法仍然可以启动2.7脚本。那么如何使用3.3?


问题答案:

inputPython 2.7中的函数,将你输入的内容评估为Python表达式。如果你只想读取字符串,请使用raw_inputPython 2.7中的函数,该函数将不评估读取的字符串。

如果你使用的是Python 3.x,raw_input则已重命名为input。引用Python 3.0发行说明,

_raw_input()已重命名为input()。也就是说,新input()函数从中读取一行,sys.stdin并在结尾的换行符被删除的情况下返回它。EOFError如果输入过早终止,它将触发。要获取的旧行为input(),请使用eval(input())

在Python 2.7中,有两个函数可以用来接受用户输入。一个是input,另一个是raw_input。你可以想到它们之间的关系如下

input = eval(raw_input)

考虑以下代码以更好地理解这一点

>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'

input接受来自用户的字符串,并在当前Python上下文中评估该字符串。当我键入dude输入时,它发现dude绑定到该值thefourtheye,因此求值结果变为,thefourtheye并将其分配给input_variable

如果我输入当前python上下文中不存在的其他内容,它将失败NameError

>>> 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的安全注意事项input:

由于评估了任何用户类型,因此也存在安全问题。例如,如果你已经使用加载os了程序中的模块import os,然后用户输入

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("Enter your name: ")执行时,它等待用户输入,并且用户输入是有效的Python函数调用,因此也会被调用。这就是为什么我们Enter your name again:再次看到提示。

因此,你最好使用这样的raw_input功能

input_variable = raw_input("Enter your name: ")

如果需要将结果转换为其他类型,则可以使用适当的函数将所返回的字符串转换为raw_input。例如,要将输入读取为整数,请使用此答案中int所示的函数。

在python 3.x中,只有一个函数可以获取用户输入,该函数称为inputpython 2.7 raw_input



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

  • 问题内容: 我正在使用Python 3.2。试过这个: 并得到以下错误: 尝试打印到交互式控制台中-出现此错误: 是在Python 3.2中真正删除的吗?如果是这样,还有什么选择? 问题答案: 它已移至。

  • 问题内容: 我在自学Python,只是在“探索”。Google说datetime是一个全局变量,但是当我尝试在终端中查找今天的日期时,我在问题标题中收到NameError吗? 问题答案: 您需要先导入模块: 之后,它可以工作:

  • 问题内容: 我有以下代码,并在尝试运行它时收到以下错误消息: 我试图让Raspberry Pi在端口17上收到输入时运行HTML脚本: 问题答案: Python的布尔常量是大写的:与以大写字母和分别。 小写变体只是变量的有效免费名称,因此您可以将它们用于任何所需的变量,例如(不建议使用; P)。

  • 我试图做一个基于链接列表和节点的N-Ary树。但是每当我试图给树添加一个新值时,我总是得到: NameError:未定义名称“self” 我使用模块,所以我必须从其他文件导入类。 我在树代码的def addTree(self,value,parent=self.root)中遇到了这个错误 树代码 节点代码 链接列表代码 也谢谢你的帮助,我对Python有点陌生,我不知道我做错了什么。

  • 我很难弄清楚为什么会出现错误:nameerror:name“convert tobinarydata”没有定义,有什么想法吗? 我认为函数convertToBinaryData的声明是正确的,尽管我不确定如何修复这个问题 回溯(最近一次调用):文件“C:\users\user............\testdb.py”,第20行,db.insertRawEcg(1,2,“C:\users\use