使用,python 3.4,有效:
>>> ast.literal_eval("2 - 1")
1
但事实并非如此:
>>> ast.literal_eval("1 | 2")
raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.BinOp object at 0x0000000003338978>
>>> ast.literal_eval("1 ^ 2")
raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.BinOp object at 0x0000000003338400>
所有值都是文字,当它可以执行添加,减法时,执行逻辑操作没有困难......
为什么我无法使用ast.literal_eval
执行逻辑操作?
答案 0 :(得分:4)
因为它是Python 2.7中的not implemented that way。
乍看之下,仅支持添加以启用complex
等1 + 2j
文字,因为它会拒绝2j + 1
。
在python 3.5中,the implementation为made a bit more lenient,并且不会以这种方式限制添加。
答案 1 :(得分:1)
它没有那样实现。唯一的运营商&#34;白名单&#34;是Add
和Sub
。 3.4,3.5
这可以作为错误报告提交给http://bugs.python.org,要求更多运营商的支持。