如何在Python的.env文件中定义列表?基于FastAPI与Pydantic的配置实践疑问
解决Pydantic从.env加载列表类型配置的问题
你说得没错,Pydantic的BaseSettings确实支持从.env文件加载列表类型的配置,但你的代码里遗漏了明确的类型注解——这才是让Pydantic自动解析逗号分隔字符串为列表的关键。
问题根源
你最初的代码里写的是:
api_tokens = []
这只是给了一个默认空列表,但没有告诉Pydantic这个字段的类型应该是列表。Pydantic无法自动推断出要把.env里的API_TOKENS = abc123,abc321转换成列表,所以解析失败。
修正后的代码
只需要给字段加上明确的类型注解(推荐用list[str]来指定是字符串列表,更严谨):
from fastapi import FastAPI from pydantic import BaseSettings class Settings(BaseSettings): # 明确标注类型为字符串列表,默认空列表 api_tokens: list[str] = [] class Config: env_file = ".env" settings = Settings() app = FastAPI()
.env文件的正确写法
你原来的写法API_TOKENS = abc123,abc321是完全可行的,Pydantic会自动把逗号分隔的字符串拆成列表元素。如果你的token里包含逗号这类特殊字符,可以用双引号包裹单个元素:
API_TOKENS = "token,with,comma",abc321,xyz789
这样设置后,settings.api_tokens就会被解析成["token,with,comma", "abc321", "xyz789"],完全满足你新旧token共存的需求。
内容的提问来源于stack exchange,提问作者Houman
相关产品推荐
相关产品推荐

