0

我正在使用json-schema来验证模式。我想自定义日期时间类型。因此,相应地重新定义了类型并扩展了验证器。但是,它并没有以我正在寻找的方式返回错误。我的代码:

        BaseVal = jsonschema.Draft202012Validator
    def date_time(checker, instance):
        return datetime.strptime(instance, "%Y-%m-%dT%H:%M:%S")
    timedatechecker = BaseVal.TYPE_CHECKER.redefine('date-time', date-time)
    Validator = jsonschema.validators.extend(BaseVal, type_checker=timedatechecker)

    errors = sorted(Validator(schema=schema).iter_errors(json), key=lambda e: e.path)

errors 变量当前包含 schema 验证期间的所有错误,例如 id、age 等,但不包含 datetime 发生的错误。我正在从验证函数返回错误列表。没有错误时返回 True,否则返回错误列表。当我从邮递员发布错误的日期时间输入时,它返回 500 Internal Server Error,并且 vscode 在终端中显示此错误消息:

strptime raise ValueError("time data %r does not match format %r", %ValueError: time data '2015-01-35T05:05:05' does not match format '%Y-%m-%dT%H:%多发性硬化症'

如何让 json-schema 捕获它,以便我可以从错误中使用它?或任何其他能达到我想要得到的相同效果的解决方法。谢谢。

4

1 回答 1

1

格式被称为date-time,不是datetime

但是,您最好定义一种新格式而不是重新定义现有格式,因为重新定义格式会破坏互操作性。

于 2022-02-23T17:17:28.543 回答