2010-09-17 7 views

Répondre

7

Eh bien, vous pouvez faire

d = eval(some_string) 

Mais si la chaîne contient l'entrée d'utilisateur, il est une mauvaise idée car une fonction aléatoire malveillant pourrait être dans l'expression. Voir Safety of Python 'eval' For List Deserialization

donc une alternative plus sûre pourrait être:

import ast 
d = ast.literal_eval(some_string) 

De http://docs.python.org/library/ast.html#ast.literal_eval:

La chaîne ou le noeud fourni ne peuvent comporter les éléments suivants Python structures littérales: chaînes, nombres, tuples , listes, dicts, booléens, et Aucun.

+0

Merci pour l'acceptation! –

11

utilisation ast.literal_eval:

évaluer en toute sécurité un noeud d'expression ou une chaîne contenant une expression de python. La chaîne ou le noeud fourni ne peut contenir que les structures littérales Python suivantes: chaînes, nombres, tuples, listes, dicts, booléens et None.

Cela peut être utilisé pour évaluer en toute sécurité des chaînes contenant des expressions Python de sources non fiables sans avoir besoin d'analyser les valeurs soi-même.

Exemple:

>>> some_string = '{123: False, 456: True, 789: False}' 
>>> import ast 
>>> ast.literal_eval(some_string) 
{456: True, 123: False, 789: False} 
1

La seule sûre façon de le faire est avec ast.literal_eval (il est sûr parce que, autrement intégré eval « » "La chaîne ou le noeud fourni ne peut consister des structures littérales Python suivantes: chaînes, nombres, tuples, listes, dicts, booléens et None. "" ".

Questions connexes