in pydantic.main.BaseModel.__init__pydantic.error_wrappers.ValidationError: 1 validation error for

文章讲述了如何在Python项目中使用Pydantic进行参数校验,特别关注了RobotMessage类的实例化,指出在构造包含List类型的source_documents字段时可能出现的类型错误,并提供了修复方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pydantic 参数校验错误,函数中使用了pydantic 进行参数校验,使用的类如下

import pydantic
from pydantic import BaseModel
from typing import List, Any, Optional

class RobotMessage(BaseModel):
    code: int = pydantic.Field(200, description="HTTP status code")
    msg: str = pydantic.Field("success", description="HTTP status message")
    question: str = pydantic.Field(..., description="Question text")
    response: str = pydantic.Field(..., description="Response text")
    source_documents: List[str] = pydantic.Field(
        ..., description="List of source documents"
    )

    class Config:
        schema_extra = {
            "example": {
                "code": 200,
                "msg": "success",
                "question": "工伤保险如何办理?",
                "response": "根据已知信息,可以总结如下:\n\n1. 参保单位为员工缴纳工伤保险费,以保障员工在发生工伤时能够获得相应的待遇。",
                "source_documents": [
                    "出处 [1] 广州市单位从业的特定人员参加工伤保险办事指引.docx:\n\n\t( 一)  从业单位  (组织)  按“自愿参保”原则,  为未建 立劳动关系的特定从业人员单项参加工伤保险 、缴纳工伤保 险费。",
                    "出处 [2] ...",
                    "出处 [3] ...",]
              
            }
        }
可以看出来使用FastAPI开启的接口,返回的消息类型是RobotMessage消息,但是这个类的构造的时候要小心,因为有参数校验

r1=RobotMessage(
            code="200",
            msg="查询成功",
            question="你是谁",
            response="我是小助手",
            source_documents=["我是小助手"]
        )

这样构造都符合要求,所以这样构造没有错误

r2=RobotMessage(
            code="500",
            msg="查询失败",
            question="你是谁",
            response="",
            source_documents=[[]]
        )

但是如r2构造就会报错,  File "pydantic/main.py", line 341, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for RobotMessage
source_documents -> 0
  str type expected (type=type_error.str)

上面的意思RobotMessage类的参数source_documents的0元素期待str类型的元素,但实际元素为列表元素[],即第一个元素的类型不是str,而是列表,所以报错,将最后一行参数改为source_documents=[]就没有问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值