On 11/30/2011 3:58 AM, Peter Otten wrote:
Terry Reedy wrote:

On 11/30/2011 1:20 AM, 郭军权 wrote:
Good after
I have a string liststr = '["aaaa","bbbb","ccc"]' ,and I need convert it
to a list like list = ["aaaa","bbbb","ccc"],what can id do?

The easiest -- and most dangerous -- way is
  >>>  eval('["aaaa","bbbb","ccc"]')
['aaaa', 'bbbb', 'ccc']

But DO NOT eval unexamined strings from untrusted sources. The reason is
that it is much the same as letting an untrusted person sit unsupervised
as the keyboard of your computer with a command window open. You would
not want to eval
    "from os import system; system('<command to delete files>')"
where '<command...>' is replaced by something obnoxious for your
operating system.

You can avoid these problems with ast.literal_eval():

literal_eval(node_or_string)
     Safely evaluate an expression node or a string containing a Python
     expression.  The string or node provided may only consist of the
     following Python literal structures: strings, numbers, tuples, lists,
     dicts, booleans, and None.

I keep forgetting that someone thought to solve the problem of eval being both convinient and dangerous. Maybe if I type it once, I will remember.
>>> import ast
>>> ast.literal_eval('["aaaa","bbbb","ccc"]')
['aaaa', 'bbbb', 'ccc']

I think it would be better if safe_eval were available as an easily accessible builtin and dangerous_eval were tucked away in a module ;-).

--
Terry Jan Reedy


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to