-2

使用 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..这个问题和另一个问题.. 但我无法在他们的问题和我的问题之间建立联系。我从他们那里得到的是,我对 Python 的使用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

ETC

编辑所以这是一个误解。感谢 DSM 指出我的文件名不匹配,感谢 Levon 仍然提供帮助并显示inteval.

4

3 回答 3

2

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

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

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

旁白:使用with打开文件的好处是当你完成或遇到异常时它会自动为你关闭。

于 2012-07-02T19:42:24.097 回答
0

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

with open('file') as f:
    for line in f:
        var = int(line)
于 2012-07-02T19:42:47.873 回答
0

如果您想从文件中检索值,那么这样做就可以了,使用eval()for this 没有意义:

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


>>> values
[2, 3, 2, 3, 1, 0]
于 2012-07-02T19:46:04.363 回答