用于列出ast.listeral_eval的python字符串列表

时间:2012-04-11 20:16:25

标签: python

>>> import ast
>>> string = '[Small, Medium, Large, X-Large]'
>>> print string
[Small, Medium, Large, X-Large]
>>> string = ast.literal_eval(string)
Traceback (most recent call last):  
    File "<pyshell#26>", line 1, in <module>
         string = ast.literal_eval(string)
    File "C:\Python27\lib\ast.py", line 80, in literal_eval
        return _convert(node_or_string)
    File "C:\Python27\lib\ast.py", line 60, in _convert
        return list(map(_convert, node.elts))
  File "C:\Python27\lib\ast.py", line 79, in _convert
    raise ValueError('malformed string')
ValueError: malformed string

如何解决?

2 个答案:

答案 0 :(得分:10)

ast.literal_eval()只接受包含有效Python文字结构的字符串(字符串,数字,元组,列表,字符串,布尔值和None)。

这是一个有效的Python表达式,只包含那些文字结构:

["Small", "Medium", "Large", "X-Large"]

这不是:

[Small, Medium, Large, X-Large]

创建有效字符串的两种方法:

string = '["Small", "Medium", "Large", "X-Large"]'
string = "['Small', 'Medium', 'Large', 'X-Large']"

答案 1 :(得分:2)

您的字符串不是有效列表。如果是字符串列表,则需要引号。

E.g:

string = '["Small", "Medium", "Large", "X-Large"]'