使用AST解析的字典时出现问题

时间:2019-07-03 18:39:42

标签: python python-3.x

我已经看过所有其他在这里发问相同问题的文章,但是我仍然无法弄清楚为什么我继续获得此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")

1 个答案:

答案 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"]

这不起作用。