FastAPI布尔值被强制转为字符串:config.testing返回str而非bool
解决Pydantic BaseSettings中testing字段返回字符串而非布尔值的问题
问题分析
你的代码里,Settings类中testing字段的默认值用了cast(bool, 0),但cast只是给类型检查器的提示——它不会在运行时把整数0转换成布尔值False。Pydantic处理这个字段时,实际拿到的还是整数0,后续序列化到JSON时就可能被转成字符串;如果是从环境变量读取值(比如"0"或"1"),Pydantic也不会自动把字符串转成布尔值,最终导致返回的JSON里testing是字符串类型。
修复步骤
直接修改config.py里的Settings类,把testing字段的默认值改成布尔值,去掉无效的cast:
class Settings(BaseSettings): environment: str = "dev" testing: bool = False # 直接用布尔值作为默认值
补充说明
如果需要通过环境变量设置testing的值,Pydantic的BaseSettings会自动处理字符串到布尔值的转换:
- 设为
TESTING=true、TESTING=1(大小写不敏感)会被解析为True - 设为
TESTING=false、TESTING=0会被解析为False
修改后再调用/ping接口,返回的testing字段就会是预期的布尔类型了。
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

