使用Python 3.11 tomllib加载TOML配置时部分键值缺失求助
问题原因与修复方案
根本原因
你用错了解析工具:tomllib是专门解析TOML格式文件的,不能直接解析Python代码文件。你的config.py是Python语法的配置文件,虽然MY_VARIABLE = "1"这种写法碰巧和TOML键值对格式一致,被成功解析,但my_variable缺失大概率是因为文件中存在TOML不兼容的Python语法(比如多行注释、缩进块、其他Python语句),导致解析过程中断,只读取到了前面的变量。
修复方案
根据你的配置文件类型,二选一即可:
方案1:保留Python格式配置文件
替换加载逻辑,直接执行配置文件中的Python代码:
app.config.from_file("../CONFIGS/config.py", load=lambda f: exec(f.read()))
这样会正确执行config.py中的所有赋值语句,将变量全部加载到app.config中。
方案2:改用TOML格式配置文件
- 将
config.py重命名为config.toml,内容改为标准TOML格式:
MY_VARIABLE = "1" my_variable = "1"
- 继续使用原有的tomllib加载逻辑:
app.config.from_file("../CONFIGS/config.toml", load=lambda f: tomllib.load(f.buffer))
额外提示
- TOML和Python赋值语法只是表面相似,不要混用解析工具,否则会出现不可预期的解析错误。
- Flask的
app.config是字典的子类,默认区分键的大小写,只要解析正确,大小写变量都会被正常保留。
内容的提问来源于stack exchange,提问作者MW_DEVEL
相关产品推荐
相关产品推荐

