4
>>> 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

直し方?

4

2 に答える 2

15

ast.literal_eval()有効な Python リテラル構造 (文字列、数値、タプル、リスト、辞書、ブール値、およびNone) を含む文字列のみを受け入れます。

これは、これらのリテラル構造のみを含む有効な Python 式です。

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

これはそうではありません:

[Small, Medium, Large, X-Large]

機能する文字列を作成する 2 つの方法:

string = '["Small", "Medium", "Large", "X-Large"]'
string = "['Small', 'Medium', 'Large', 'X-Large']"
于 2012-04-11T20:20:25.107 に答える
3

あなたの文字列は有効なリストではありません。文字列のリストの場合は、引用符が必要です。

例えば:

string = '["Small", "Medium", "Large", "X-Large"]'
于 2012-04-11T20:18:04.967 に答える