使用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
的更好替代方案。
答案 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]