Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does this string not work with ast.literal_eval

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
like image 562
user1513192 Avatar asked Aug 22 '12 19:08

user1513192


1 Answers

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.

like image 84
David Robinson Avatar answered Oct 03 '22 11:10

David Robinson