这个问题已经在这里有一个答案:
- 在python误差d未被定义。 [重复] 3个答案
我写一些代码,需要用户输入一个文件在程序中使用:
file=input('input file name')
然而,当你再输入一个文件名(或任何与此有关的)错误弹出saything,无论刚刚输入没有定义,并且结束程序。 是什么原因造成这种情况?
谢谢
这个问题已经在这里有一个答案:
我写一些代码,需要用户输入一个文件在程序中使用:
file=input('input file name')
然而,当你再输入一个文件名(或任何与此有关的)错误弹出saything,无论刚刚输入没有定义,并且结束程序。 是什么原因造成这种情况?
谢谢
这个很重要:
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
虽然有它的缺点。
如果你使用的是Python 2.x的-你想使用raw_input
- input
用于东西在2.x版本完全不同 如果你正在使用Python 3.X - input
是正确的。
在一个侧面说明,推荐风格指南是使用open
打开文件,所以它不是太糟糕,你要阴影file
在这里,但任何人都期待能够使用file
(基本相同, open
)的功能可能会震惊之后。
您需要改用输入的raw_input的。
输入docsting:
输入([提示]) - >值
相当于EVAL(的raw_input(提示))。
Python解释器试图EVAL你的输入,如果它是一个文件名,这将失败。
input
计算它的参数,所以,当你给它喜欢的事my_text_file
它会尝试把它看成一个变量。 使用raw_input
来代替。
(此外,使用file
作为变量名是一个坏主意,因为它也是一个Python的名字内置类。体型类似path
, filename
, f
)。