2011-09-10 130 views
1

或其他方式問我想是否有一個literal_eval等於範圍函數(不發送整個數組作爲範圍)。有沒有辦法使用ast.literal_eval做range()?

以下

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] 

回答

4

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

ast.literal_eval(node_or_string)

安全評估的表達式節點或含有Python表達式的字符串。 提供的字符串或節點可能只包含以下Python文字結構:字符串,數字,元組,列表,字典,布爾值和無。

範圍(明確指定的列表除外)不是其中的任何一個,所以不是。

+0

謝謝,希望我錯過了一些東西,但我猜不是。 – matt