首页 > 解决方案 > 用空格分隔的数字字符串上的 ast 文字 eval

问题描述

不同版本的 ast 有不同的行为:

python2,python3.7:

ast.literal_eval("3 -1")
>> ValueError: malformed node or string

python3.4

ast.literal_eval("3 -1")
>> 2

有没有关于它的文件?

标签: pythonabstract-syntax-tree

解决方案


这记录在错误 31778中。更严格行为的基本原理是旧行为可能导致某些值被错误地评估:例如,日期字符串2019-12-18可以作为算术表达式进行评估,而不是作为字符串保留。

不评估表达式更符合记录的行为

提供的字符串或节点只能由以下 Python 文字结构组成:字符串、字节、数字、元组、列表、字典、集合、布尔值和无。

这可用于安全地评估包含来自不受信任来源的 Python 值的字符串,而无需自己解析这些值。它不能评估任意复杂的表达式,例如涉及运算符或索引。

根据错误报告。


推荐阅读