如何用Pydantic Settings解析字符串列表?
如何用Pydantic Settings解析字符串列表?
这个问题其实和Pydantic Settings解析环境变量的默认逻辑有关,我来给你拆解一下:
为什么整数列表能成功,字符串列表不行?
Pydantic Settings 默认会尝试把环境变量的值当作 JSON 来解析。你用的 [1, 2, 3] 是合法的JSON数组格式,所以能直接被解析成整数列表;但你写的 ['a', 'b', 'c'] 用了单引号包裹字符串,而JSON规范里明确要求字符串必须用双引号,这个格式不符合JSON标准,自然就解析失败了。
不用自定义解析器的解决方法
这里有两种简单的方案,都不需要写复杂的自定义解析逻辑:
方案一:使用符合JSON规范的格式
把环境变量的值改成用双引号包裹字符串的JSON数组,注意设置环境变量时的转义(不同shell的写法略有区别):
比如在bash/zsh里可以这样设置:
export my_list_of_strings='["a", "b", "c"]'
代码部分保持不变:
from pydantic_settings import BaseSettings class Settings(BaseSettings): my_list_of_strings: list[str] print(Settings().model_dump()) # 输出结果: {'my_list_of_strings': ['a', 'b', 'c']}
这样Pydantic就能正常识别并解析这个JSON数组了。
方案二:用逗号分隔的字符串格式
如果你觉得JSON格式太繁琐,也可以直接用逗号分隔字符串,再借助Pydantic的内置验证器快速处理:
from pydantic_settings import BaseSettings from pydantic import BeforeValidator class Settings(BaseSettings): # 用lambda直接拆分逗号分隔的字符串 my_list_of_strings: list[str] = BeforeValidator(lambda x: x.split(',')) # 设置环境变量:export my_list_of_strings="a,b,c" print(Settings().model_dump()) # 输出结果: {'my_list_of_strings': ['a', 'b', 'c']}
这种方式更简洁,适合不需要复杂格式的场景。
备注:内容来源于stack exchange,提问作者Leonardus Chen
相关产品推荐
相关产品推荐

