我使用
然而,今天我在反序列化时遇到了这个错误:
pprint.PrettyPrinter
将数据写入文件,现在我正在使用ast.literal_eval
读取它。这种方式一直在我身上运行了很长一段时间,并且我对生成的文本表示比较满意。然而,今天我在反序列化时遇到了这个错误:
File "/...mypath.../store.py", line 82, in <lambda>
reader=(lambda fd: ast.literal_eval(fd.read())),
File "/usr/lib64/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/usr/lib64/python2.7/ast.py", line 60, in _convert
return list(map(_convert, node.elts))
File "/usr/lib64/python2.7/ast.py", line 63, in _convert
in zip(node.keys, node.values))
File "/usr/lib64/python2.7/ast.py", line 62, in <genexpr>
return dict((_convert(k), _convert(v)) for k, v
File "/usr/lib64/python2.7/ast.py", line 63, in _convert
in zip(node.keys, node.values))
File "/usr/lib64/python2.7/ast.py", line 62, in <genexpr>
return dict((_convert(k), _convert(v)) for k, v
File "/usr/lib64/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
如何修复这个特定的文件?
这个文件有17k行/700kb。
我将它加载到Emacs中,括号是平衡的。
文件中没有非ASCII字符。
我可以“分而治之”(将文件分成两半并尝试读取每一半),但这相当繁琐。
有更好的方法吗?
我修改了ast.literal_eval:_convert
以打印出问题节点,结果显示为<_ast.UnaryOp object at 0x110696510>
。不太有帮助。
如何确保将来不会再出现这种情况?
我希望JSON
不是答案。;-)
我没有使用JSON
,因为:
lineno
和col_offset
属性 - 这应该能够告诉您问题的准确位置。 - jasonharperast.literal_eval
无法处理空集合。 - user2357112ast.literal_eval(str(float("inf")))
(请将您的评论转换为答案,我会很乐意接受它)。 - sds