1

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

file=input('input file name')

但是,每当您输入文件名(或其他任何内容)时,都会弹出一个错误,说明刚刚输入的任何内容都没有定义并结束程序。是什么导致这种情况发生?

谢谢

4

4 回答 4

4

如果您使用的是 Python 2.x - 您想要使用raw_input-input用于 2.x 中完全不同的东西。如果您使用的是 Python 3.x -input是正确的。

附带说明一下,推荐的样式指南是open用于打开文件的,所以你在file这里遮蔽并不算太糟糕,但是任何希望能够使用file(基本上与open)作为函数的人可能会在以后感到震惊。

于 2012-07-10T11:36:48.147 回答
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有它的缺点。

于 2012-07-10T11:37:05.827 回答
0

您需要使用 raw_input 而不是输入。

输入文档:

输入([提示])-> 值

等效于 eval(raw_input(prompt))。

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

于 2012-07-10T11:36:30.330 回答
0

input评估它的论点,所以当你给它类似的东西时,my_text_file它会尝试把它当作一个变量。改为使用raw_input

(另外,file用作变量名是个坏主意,因为它也是 Python 内置类的名称。更喜欢类似path, filename, f.)

于 2012-07-10T11:36:40.830 回答