Why does ast.literal_eval('5 * 7') fail?
为什么
1 2 3 4 5 6 7 8 9 10 | import ast print(ast.literal_eval('5 + 7')) # -> 12 print(ast.literal_eval('5 * 7')) # -> Traceback (most recent call last): ... ValueError: malformed node or string: <_ast.BinOp object at ...> |
文档并不能解释这一点。
在回答了这个问题之后,我发现了这个问题:得到了一个字符串的结果。
不允许使用其他运算符;该函数只接受文本,而不接受表达式。
换句话说,
另请参见几个相关的python bugtracker条目:訇25335 ast.literal_eval无法解析带前导"+"的数字,22525 ast.literal_eval()无法按文档所述执行,并且4907 ast.literal_eval未正确处理复杂数字。
*从技术上讲,
问题不是"为什么
在许多版本中,包括python 3.5,
1 2 3 4 5 6 7 8 | >>> ast.literal_eval('[1] + [2]') Traceback (most recent call last): ... ValueError: malformed node or string: <_ast.BinOp object at 0x7fdddbe785f8> >>> ast.literal_eval('[1, 2]') [1, 2] >>> [1] + [2] [1, 2] |