如何将表示嵌套列表的字符串解析为实际的列表?

13

假设我有一个字符串表示一些嵌套的列表,我想将其转换为实际内容。我认为可以这样做:

exec "myList = ['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']"

但在用户可能提供字符串以执行的环境中,这样做可能是一个坏主意。是否有任何想法可以实现相同的功能,且更加安全可靠的解析器?


1
+1 因为知道这种事情有风险并询问它。 - Peter Hansen
1个回答

33
>>> import ast
>>> mylist = ast.literal_eval("['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']")
>>> mylist
['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']

ast.literal_eval:

安全地计算表达式节点或包含Python表达式的字符串。提供的字符串或节点只能由以下Python字面结构组成:字符串、数字、元组、列表、字典、布尔值和None。

这可用于安全地评估来自不受信任来源的包含Python表达式的字符串,无需自己解析值。


+1 导入 ast 正在流行,好东西! - jathanism
很酷。就在上周我第一次使用了eval(),但是ast.literal_eval才是我真正想要的。注意,我使用eval来解析配置文件值,所以它是可信数据,但还是... - ddaa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接