假设我有一个字符串表示一些嵌套的列表,我想将其转换为实际内容。我认为可以这样做:
exec "myList = ['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']"
但在用户可能提供字符串以执行的环境中,这样做可能是一个坏主意。是否有任何想法可以实现相同的功能,且更加安全可靠的解析器?
假设我有一个字符串表示一些嵌套的列表,我想将其转换为实际内容。我认为可以这样做:
exec "myList = ['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']"
但在用户可能提供字符串以执行的环境中,这样做可能是一个坏主意。是否有任何想法可以实现相同的功能,且更加安全可靠的解析器?
>>> import ast
>>> mylist = ast.literal_eval("['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']")
>>> mylist
['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']
安全地计算表达式节点或包含Python表达式的字符串。提供的字符串或节点只能由以下Python字面结构组成:字符串、数字、元组、列表、字典、布尔值和None。
这可用于安全地评估来自不受信任来源的包含Python表达式的字符串,无需自己解析值。