是否有未记录的ast.literal_eval限制?

时间:2016-12-07 13:46:27

标签: python literals

使用,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执行逻辑操作?

2 个答案:

答案 0 :(得分:4)

因为它是Python 2.7中的not implemented that way

乍看之下,仅支持添加以启用complex1 + 2j文字,因为它会拒绝2j + 1

在python 3.5中,the implementationmade a bit more lenient,并且不会以这种方式限制添加。

答案 1 :(得分:1)

它没有那样实现。唯一的运营商&#34;白名单&#34;是AddSub3.43.5

这可以作为错误报告提交给http://bugs.python.org,要求更多运营商的支持。