11

假设我有一个代表一些嵌套列表的字符串,我想将它转换成真实的东西。我可以这样做,我认为:

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

但是在用户可能提供字符串来执行的环境中,这可能/将是一个坏主意。有人对一个可以完成同样事情的整洁的解析器有任何想法吗?

4

1 回答 1

28
>>> 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 文字结构组成:字符串、数字、元组、列表、字典、布尔值和无。

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

于 2009-12-18T07:00:52.330 回答