小编mat*_*att的帖子

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

或者另一种方式问我想是否有一个文字可以将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)

python

2
推荐指数
1
解决办法
654
查看次数

标签 统计

python ×1