为什么这个字符串不适用于ast.literal_eval

时间:2012-08-22 19:35:44

标签: python string eval

我收到格式错误的字符串错误。

这是我的测试

>>> eval("'Hello:: '+'fdsfds'")
'Hello:: fdsfds'
>>> import ast
>>> ast.literal_eval("'Hello:: '+'fdsfds'")
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    ast.literal_eval("'Hello:: '+'fdsfds'")
  File "C:\Python27\lib\ast.py", line 80, in literal_eval
    return _convert(node_or_string)
  File "C:\Python27\lib\ast.py", line 79, in _convert
    raise ValueError('malformed string')
ValueError: malformed string

1 个答案:

答案 0 :(得分:6)

来自ast.literal_eval docs

  

提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和None。

使用+的连接不包括在内:它不是文字表达式,而是对str.__add__的调用。这与1+1"hello".upper()不起作用的原因相同。