Pydantic v1.x可自动校验火山引擎API响应字段类型、缺失项及嵌套结构,避免手动判断;需安装pydantic==1.10.12,逐层定义BaseModel子类(如PlayInfo→MediaItem→DescribeMediaListResponse),并为可选字段设默认值,最后用**resp_dict实例化解析并触发校验。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在火山引擎API调用中,用Pydantic定义返回模型能自动校验字段类型、缺失项和嵌套结构,避免手动写if key in resp反复判断——尤其当接口返回几十个字段、含多层list/dict嵌套时,不定义模型极易因字段名拼错或类型不符导致运行时异常。
安装依赖并创建基础模型类
执行 pip install pydantic==1.10.12(注意:火山引擎多数SDK基于Python 3.7+,【必须用Pydantic v1.x,v2不兼容】)。
新建 models.py 文件,导入 BaseModel:
from pydantic import BaseModel
class BaseResponse(BaseModel): pass
定义单层响应结构(如获取实例列表)
方法一:直接继承 BaseModel 写字段
class InstanceItem(BaseModel):
instance_id: str
status: str
cpu: int
memory_mb: int
class ListInstancesResponse(BaseResponse):
instances: list[InstanceItem]
total_count: int
这一步不能漏掉 total_count 字段——火山引擎多数列表接口都带该字段,不声明会导致解析失败后静默丢弃整个响应。
处理带分页和嵌套对象的复杂响应
第一步:识别火山引擎文档中的实际JSON结构
比如/volc/vod/DescribeMediaList 接口返回中,media_list 是数组,每个元素含 play_info_list(也是数组),而 play_info_list 每项又有 definition、play_url、duration 等字段。
第二步:逐层建模,先定义最内层
class PlayInfo(BaseModel):
definition: str
play_url: str
duration: float
第三步:定义中间层 media 对象
class MediaItem(BaseModel):
media_id: str
title: str
play_info_list: list[PlayInfo] = []
第四步:组合顶层响应
class DescribeMediaListResponse(BaseResponse):
media_list: list[MediaItem]
page_number: int
page_size: int
total_count: int
注意:play_info_list 声明为 list[PlayInfo] = [],否则当接口返回空数组或缺失该字段时会报 ValidationError。
用模型解析火山引擎SDK返回的原始字典
调用火山引擎 Python SDK 后,拿到的是 dict 类型响应体(不是 JSON 字符串)。
假设 resp_dict = volc_client.describe_media_list(...) 返回结果:
parsed = DescribeMediaListResponse(**resp_dict)
这一步会立即触发字段校验——如果 resp_dict 里 media_list 缺失,或某条 media 的 play_url 是 None,Pydantic 会抛出 ValidationError 并明确指出哪一层哪个字段出问题。
后续代码可安全使用 parsed.media_list[0].play_info_list[0].play_url,无需再 if 'play_url' in ... 判断。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











