AttributeError:datetime.date对象没有属性' __ dict __'

时间:2015-09-06 02:24:24

标签: python

resp = web.Response(body=json.dumps(r, cls=CJsonEncoder, ensure_ascii=False, default=lambda o: o.__dict__).encode('utf-8'))

当我使用jinja2,并从MYSQL中检索日期时,但显示错误。 数据:

2015-09-01
2015-09-04

如何解决? 我可能需要将jinja2转换为django ??

1 个答案:

答案 0 :(得分:1)

这与Django或Jinja2或您的Web框架无关。您的数据包含date个对象,JSON没有日期类型,因此json模块不知道如何存储它们。它试图回退到你的default函数,它只转储所有对象的属性,但date类型是用C实现的,并没有Python的dict属性。

您可以通过展开default

来解决此问题
import datetime

def json_default(value):
    if isinstance(value, datetime.date):
        return dict(year=value.year, month=value.month, day=value.day)
    else:
        return value.__dict__

resp = web.Response(body=json.dumps(r, cls=CJsonEncoder, ensure_ascii=False, default=json_default).encode('utf-8'))

我建议反对使用.__dict__作为全能回退,但是 - 您的输出可能包含私有垃圾,并且您的JSON在解码时可能不会产生类似原始数据的内容。< / p>