You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改jsonschema validator源码简化缺失字段错误输出?

修改jsonschema错误输出,隐藏完整Schema仅显示缺失键名

问题场景

使用jsonschema.validators.validator_for验证JSON数据时,若输入缺失Schema要求的必填字段,错误输出会附带完整的Schema内容(我的Schema超过1000行),导致日志冗余。希望调整后仅显示缺失的JSON键名。

当前使用的验证代码:

from jsonschema import validate
from jsonschema.validators import validator_for

def validator_schema():
    sebas_schema = get_schema()
    validator = validator_for(sebas_schema)(sebas_schema)
    for error in validator.iter_errors(jsondata):
        print(error)

validator = validator_schema()

方案一:无需修改源码,直接处理错误输出(推荐)

不需要改动库源码,只需修改自己的代码,只打印错误消息部分,而非完整的错误对象:

from jsonschema import validate
from jsonschema.validators import validator_for

def validator_schema():
    sebas_schema = get_schema()
    validator = validator_for(sebas_schema)(sebas_schema)
    for error in validator.iter_errors(jsondata):
        # 只打印错误消息,即缺失的键名提示
        print(error.message)

validator = validator_schema()

这样输出就只会显示'cycle' is a required property,不会附带完整Schema。

方案二:修改jsonschema源码(不推荐,升级库会失效)

如果一定要修改库源码,步骤如下:

  • 找到jsonschema的安装目录:执行pip show jsonschema,查看Location字段(比如/usr/local/lib/python3.9/site-packages)
  • 进入该目录下的jsonschema文件夹,打开exceptions.py文件
  • 找到ValidationError类的__str__方法(不同版本可能对应_format_error方法),原方法会输出错误消息、完整Schema和实例数据,修改为仅返回错误消息:
    def __str__(self):
        return self.message
    
    若需要保留少量上下文,可调整为:
    def __str__(self):
        return f"{self.message}\nFailed validating '{self.validator}' in schema"
    
  • 保存文件后,重新运行验证代码即可生效。

注意:修改源码会影响所有使用该库的代码,且升级jsonschema后修改会被覆盖,优先推荐方案一。

内容的提问来源于stack exchange,提问作者Andres Barrera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:57:33