Why does this string not work with ast.literal_eval

≡放荡痞女 提交于 2019-12-19 03:31:42

问题


I get a malformed string error.

Here is my testings

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


From the ast.literal_eval docs:

The string or node provided may only consist of the following Python literal structures: strings, numbers, tuples, lists, dicts, booleans, and None.

Concatenation using + isn't included within that: it's not a literal expression, it's a call to str.__add__. It's the same reason 1+1 or "hello".upper() wouldn't work.



来源:https://stackoverflow.com/questions/12080197/why-does-this-string-not-work-with-ast-literal-eval

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!