Pydantic 的 field_validator:字段什么时候校验,返回值去了哪里?

在请求模型里看到 @field_validator("score"),很容易以为它只是给方法加了一个标记:这个方法由谁调用?返回的值又去了哪里? 它的作用是告诉 Pydantic:校验 score 字段时,自动执行下面的方法,并把返回值作为这个字段的最终值。 本文适合已经会写 BaseModel、但还不熟悉自定义校验的读者,示例使用 Pydantic v2。 类型正确,还不够 假设接口接收一次考试成绩: { "score": 120 } int 可以说明成绩应当是整数,但 120 也是整数。对于满分 100 分的考试,还需要检查成绩是否在 0~100 之间。 这些规则可以放进字段校验器,在请求进入业务处理前统一完成。 一个可以直接运行的例子 把下面代码保存为 example.py,通过 uv run --with 'pydantic>=2,<3' python example.py 执行: from pydantic import BaseModel, ValidationError, field_validator class ExamResult(BaseModel): score: int @field_validator("score") @classmethod def validate_score(cls, value: int) -> int: if not 0 <= value <= 100: raise ValueError("成绩必须在 0~100 之间") return value result = ExamResult(score=85) assert result.score == 85 print(result.score) try: ExamResult(score=120) except ValidationError as exc: error = exc.errors()[0] assert error["loc"] == ("score",) print(error["msg"]) else: raise AssertionError("应该拒绝超过满分的成绩") 输出: ...

2026年10月22日 · 1 分钟 · map[name:Jeanphilo]