或另一种方式要求我假设有一个文字,它将literal_eval等效于范围函数(不将整个数组作为范围发送)。
以下
import ast
ast.literal_eval("range(0,3)")
ast.literal_eval("[0, 1, 2, 3][0:3]")
结果:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/usr/lib64/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
虽然这是可能的,但它会将整个数组转换为字符串然后返回,这是不理想的。我希望在没有初始列表的情况下使用[0:3]语法。
>>> ast.literal_eval(str(range(0,3)))
[0, 1, 2]
答案 0 :(得分:4)
http://docs.python.org/library/ast.html#ast.literal_eval
ast.literal_eval(node_or_string)
安全地评估表达式节点或包含Python表达式的字符串。 提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,字符串,布尔值和无。
范围(明确指定的列表除外)不是其中任何一个,所以没有。