NameError。可能是eval(),raw_input或误解

时间:2012-07-02 19:37:23

标签: python eval

使用Python 2.6并收到恼人的错误,我仍然不确定原因。我感兴趣的文件包含多行只有一个值。我想检索这些值。这段代码

f = open(file, 'r')
for line in file:
    value = eval(line)

导致以下错误消息:

   File "<string>", line 1, in <module>
NameError: name 'c' is not defined

所以我在这里研究Stack Overflow ..用this问题和another一个..但是我很难在他们的问题和我的问题之间建立联系。我从他们那里得到的是,我使用eval()可能会让Python感到困惑,我应该使用raw_input让Python知道它不必评估line而是实际的变量line代表。但是,将我的代码修改为:

for line in file:
    value = eval(raw_input(line))

这引发了以下错误(并且可能已经超载终端..它只是冻结直到我退出程序):

File "<string>", line 0
^
SyntaxError: unexpected EOF while parsing

我在这里做错了什么?我已经意识到eval()不是最喜欢使用SO的事实,我是否误解了它的功能?
编辑:我的文件是值列表,所以,

2 
3
2
3
1
0

编辑所以这是一个误解。感谢DSM指出我的文件名不匹配,感谢Levon继续帮助并显示int作为eval的更好替代方案。

3 个答案:

答案 0 :(得分:2)

如果您只想从文件中读取这些数字并将其转换为整数,则可以这样做。

with open('data.txt') as f:
    for line in f:
        value = int(line)

然后您可以根据需要使用该值。

除了:使用with打开文件的好处是,当您完成或遇到异常时,它会自动关闭。

答案 1 :(得分:0)

要回答你问题的标题,是的,你是误解了它。让我解释一下:
eval执行您放入其中的代码。因此x=eval('c')x=c相同 raw_input用于获取用户输入。参数是要显示给用户的字符串,而不是输入 如果您只想读取文件中的值,可以使用

with open('file') as f:
    for line in f:
        var = int(line)

答案 2 :(得分:0)

如果你想从文件中检索值,那么这样做,使用eval(),这是没有意义的:

>>> with open('data.txt') as f:
        values=[int(x) for x in f]


>>> values
[2, 3, 2, 3, 1, 0]