我已经看过所有其他在这里发问相同问题的文章,但是我仍然无法弄清楚为什么我继续获得此Traceback。奇怪的是,该程序可以按预期运行,但始终在最后显示此Traceback:
Traceback (most recent call last):
File "/home/me/Python/NextLogAudit.py", line 5, in <module>
i = ast.literal_eval(i)
File "/usr/lib/python3.7/ast.py", line 46, in literal_eval
node_or_string = parse(node_or_string, mode='eval')
File "/usr/lib/python3.7/ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 1
^
SyntaxError: unexpected EOF while parsing
我正在尝试找出如何消除此错误的方法,以便程序可以干净地退出。另外,它不允许我在有关字典的if语句中放置2个条件,因此我不得不将第二个条件嵌套在第一个if中。我很确定这与AST如何解析字典有关,但无法弄清楚。我要打开的文件是字符串格式的词典列表:
with open('/home/me/Python/logtest') as f:
for i in f.readlines():
i = ast.literal_eval(i)
if re.search("Preview accessed.+", i["message"]):
if i["user"] == "user1":
name = re.search('(?<=Preview accessed: \").+(?=\.)', \
i["message"])
print("{} viewed {} on {}".format(i["user"], \
name.group().replace('\\',''),
i["time"].replace('+00:00','')))
else:
print("Nothing")
答案 0 :(得分:1)
您需要防止出现空行-毕竟数据中只有一个:
with open('/home/me/Python/logtest') as f:
for i in f.readlines():
if not i.strip(): # do nothing for empty lines
continue
i = ast.literal_eval(i)
# ... rest of your code ...
否则,在逃避它后,它会读取不是字典的内容,并且在使用
时您会对其进行索引i["message"]
这不起作用。