有没有办法用ast.literal_eval做range()?

时间:2011-09-10 07:26:38

标签: python

或另一种方式要求我假设有一个文字,它将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]

1 个答案:

答案 0 :(得分:4)

http://docs.python.org/library/ast.html#ast.literal_eval

  

ast.literal_eval(node_or_string)

     

安全地评估表达式节点或包含Python表达式的字符串。 提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,字符串,布尔值和无。

范围(明确指定的列表除外)不是其中任何一个,所以没有。