a= {'Locator__creation_date': {'start': datetime.date(2013, 11, 14), 'end': datetime.date(2013, 11, 14)}, 'Locator__employed': u'True', 'Locator__employer_state': u'AL', 'Locator__receiving_hiv_treatment': u'True', 'Locator__hiv_treatment_state': u'AR', 'Locator__mental_health_provider': u'False', 'Locator__parole': u'True', 'Locator__parole_state': u'IA', 'data_model_name': ['Locator']}
ast.literal_eval(a)
它给出了
ValueError: malformed string
答案 0 :(得分:2)
大概你认为a
是一个字符串:
a = "{'Locator__creation_date': {'start': datetime.date(2013, 11, 14), 'end': datetime.date(2013, 11, 14)}, 'Locator__employed': u'True', 'Locator__employer_state': u'AL', 'Locator__receiving_hiv_treatment': u'True', 'Locator__hiv_treatment_state': u'AR', 'Locator__mental_health_provider': u'False', 'Locator__parole': u'True', 'Locator__parole_state': u'IA', 'data_model_name': ['Locator']}"
这不起作用,因为datetime.date(...)
不是Python文字。它表示Python datetime.date()
对象,ast.literal_eval()
不处理任意类型。
仅 Python文字值({...}
用于词典或集合,[...]
用于列表,(...)
用于元组,数字用于数字和字符串文字(如{ {1}}以及u'...'
和r'...'
以及各种引用变体)都会得到处理。请参阅Literals section of the Python expressions documentation和ast.literal_eval()
documentation本身:
提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和
'...'
。