pytest_schema Enum验证异常:合法枚举值未通过校验
问题原因与解决方案
核心问题
错误提示里的Enum校验列表和你代码中定义的["testObs", "test"]完全不符,且出现'testObs' should be instance of 'list'的异常,根源是误用了Enum类或者schema定义被意外覆盖:
- 你可能导入了Python标准库
enum.Enum而非schema库提供的Enum校验器,前者是用来定义枚举类的,不是值校验工具,会导致校验逻辑完全错误; - 代码运行时,
api_schema里的observer约束被替换成了包含BY_CARRIER等值的其他Enum,和你编写的定义不一致。
解决方案
修正Enum导入
确保导入语句是从schema库中引入所需工具:from schema import schema, And, Enum若确实需要使用标准库枚举,用别名区分避免冲突:
from enum import Enum as PyEnum from schema import schema, And, Enum确认schema定义未被覆盖
在调用validate前打印api_schema,检查observer字段的约束是否和编写的一致:print(api_schema)如果输出的
Enum列表是错误提示里的['testObs', 'BY_CARRIER', ...],说明代码中有其他地方修改了api_schema,排查并修复覆盖逻辑。单独测试校验逻辑
单独验证observer字段的校验器,确认问题点:from schema import Enum obs_validator = Enum(["testObs", "test"]) print(obs_validator.validate("testObs")) # 正常应返回'testObs',无异常
内容的提问来源于stack exchange,提问作者gabriel munteanu
相关产品推荐
相关产品推荐

