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

mat*_*att 2 python

或者另一种方式问我想是否有一个文字可以将literal_eval等同于范围函数(不将整个数组作为范围发送)。

下列

import ast
ast.literal_eval("range(0,3)")
ast.literal_eval("[0, 1, 2, 3][0:3]")
Run Code Online (Sandbox Code Playgroud)

结果是:

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
Run Code Online (Sandbox Code Playgroud)

虽然这是可能的,但它将整个数组转换为字符串然后返回,这并不理想。我希望在没有初始列表的情况下使用 [0:3] 语法。

>>> ast.literal_eval(str(range(0,3)))
[0, 1, 2]
Run Code Online (Sandbox Code Playgroud)

Amb*_*ber 5

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

ast.literal_eval(node_or_string)

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

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