Как безопасно оценить словарь в Python? - PullRequest
2 голосов
/ 19 января 2012

Я должен связаться с онлайн-сервисом, который отправляет мне следующие данные в кодировке Urlen:

data_to_process = {...}
args = {'args0': data_to_process, 'action': 'save'}

result = urllib2.urlopen(..., urllib.urlencode(args), ...)

Основные интересующие данные хранятся в словаре data_to_process. Я хотел бы получить исходный словарь, который должен содержать только строковые, числовые и логические значения. Как вы можете достичь этого?

Я пробовал

eval(dict_str,{'__builtins__': None})

но это не удается для False значений (и кто знает, что еще).

спасибо за любые идеи!

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Вы уверены, что сервис не отправляет вам JSON? В этом случае вы можете проанализировать его, используя встроенную функцию json.loads() (начиная с Python 2.6).

3 голосов
/ 19 января 2012

Использование ast.literal_eval:

>>> from ast import literal_eval
>>> test = repr({"ham": True, 42: "spam", "foo": "bar"})
>>> test
"{42: 'spam', 'foo': 'bar', 'ham': True}"
>>> literal_eval(test)
{42: 'spam', 'foo': 'bar', 'ham': True}
...