输入数据未定义

时间:2012-07-10 11:31:06

标签: python input

我正在编写一些代码,需要用户输入一个文件以供程序使用:

file=input('input file name')

然而,每当你输入一个文件名(或任何相关的东西)时,会弹出一个错误,说明刚刚输入的内容未定义并结束程序。造成这种情况的原因是什么?

由于

4 个答案:

答案 0 :(得分:4)

如果您使用的是Python 2.x - 您希望使用raw_input - input用于2.x中完全不同的内容。如果您使用的是Python 3.x - input是正确的。

在旁注中,推荐的样式指南是使用open来打开文件,所以你在这里隐藏file并不是太糟糕,但是任何人都希望能够使用{file 1}}(与open基本相同)因为函数可能会在以后受到冲击。

答案 1 :(得分:2)

这很重要:

input([prompt]) -> value
Equivalent to eval(raw_input(prompt)).

输入会尝试eval您的输入

检查

In [38]: l =  input("enter filename: ")
enter filename: dummy_file
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
C:\Python27\<ipython-input-37-b74d50e2a058> in <module>()
----> 1 l =  input("enter filename: ")

C:\Python27\<string> in <module>()

NameError: name 'dummy_file' is not defined


In [39]: input /?
Type:       builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form:<built-in function input>
Namespace:  Python builtin
Docstring:
input([prompt]) -> value

Equivalent to eval(raw_input(prompt)).

In [40]: file = raw_input("filename: ")
filename: dummy_file

In [41]: file
Out[41]: 'dummy_file'

使用raw_input有它的缺点。

答案 2 :(得分:0)

您需要使用raw_input而不是input。

输入docsting:

  

输入([提示]) - &gt;值

     

相当于eval(raw_input(prompt))。

python解释器尝试评估您的输入,如果它是文件名,则会失败。

答案 3 :(得分:0)

input评估它的参数,所以当你给它类似my_text_file的东西时,它会尝试将其视为一个变量。请改用raw_input

(另外,使用file作为变量名是个坏主意,因为它也是Python内置类的名称。喜欢pathfilename之类的东西, f。)