为什么pycharm在第6行报告“找不到引用‘isoformat’”

2024-07-08 09:03:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在使用json时对datetime进行编码。 由于json不支持datetime类型,所以我建议重新构造一个子类。 但是pycharm报道:

can not find reference 'isoformat'" in line 6

即第1个elif条款。在

为什么以及如何解决?在

import datetime
class DateTimeEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return obj.isoformat()
        elif isinstance(obj, datetime.date):
            return obj.isoformat()
        elif isinstance(obj, datetime.timedelta):
            return (datetime.datetime.min + obj).time().isoformat()
        else:
            return super(DateTimeEncoder, self).default(obj)

Tags: selfjsonobjdefault类型编码datetimereturn
1条回答
网友
1楼 · 发布于 2024-07-08 09:03:14

不确定您到底遗漏了什么,但您的代码适用于所有4种情况:

  • datetime
  • date
  • timedelta
  • 规则类型,例如str

以下是我正在运行的:

import datetime
import json


class DateTimeEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return obj.isoformat()
        elif isinstance(obj, datetime.date):
            return obj.isoformat()
        elif isinstance(obj, datetime.timedelta):
            return (datetime.datetime.min + obj).time().isoformat()
        else:
            return super(DateTimeEncoder, self).default(obj)


data = {
    'dt1': datetime.datetime.now(),
    'dt2': datetime.date.today(),
    'dt3': datetime.timedelta(4),
    's': 'test'
}

print(json.dumps(data, cls=DateTimeEncoder))

印刷品:

^{pr2}$

尝试过python2.7和3.4。在

相关问题 更多 >

    热门问题