過去記事でも、困っていたPydantic V2問題ですが、生成AIコーディングにより、ようやく突破できました。
- 事象
- pydantic version.2にて、入れ子(ネスト)のクラス定義をした場合、オプション項目の省略(Noneセットではなく、リクエストボディから省略)ができず、エラーになる
- 原因
- pydantic v2でnull定義が厳格化されてしまったこと
- ネストクラス定義名と項目名を同じにしてしまうと、pydanticが誤認してしまうこと
- 解決方法
- Union構文 = Noneと、クラス名と変数名を同じにしないことで解決できました
実際のコード.py
class ResponseName(BaseModel):
type: str
number: str
name: str
class NameInquiryRes(BaseModel):
responseName: Union[ResponseName, None] = None
traceId: str | None = None
processingDate: str | None = None
errorCode: str | None = None
errorMessage: str | None = None
過去記事で、一つ目の原因まではせまれたのですが、二つ目が当時はどうしても判明できず未解決のままでした。生成AIにデバッグしてもらい、ようやく解決することができました。