规范中的TOML示例无法被tomllib解析,并被判定为不正确
我直接从toml.io网站复制了下面这段TOML。这应该是官方规范,版本1.1:
name = { first = "Tom", last = "Preston-Werner" }
point = {x=1, y=2}
animal = { type.name = "pug" }
contact = {
personal = {
name = "Donald Duck",
email = "[email protected]",
},
work = {
name = "Coin cleaner",
email = "[email protected]",
},
}
当我在Python中用 tomllib 读取,或者把它放到各种在线校验器中,大家都声称这不是有效的TOML。具体来说,如果把内联表中的换行去掉(使得 contact 全部在同一行),就能工作。
上述示例有什么问题吗?还是说规范最近才改动过,工具还没更新(这是 tomllib 在Python 3.14中的情况;我没有检查校验器的版本信息)?
也许有人知道一个更新的校验工具,无论是命令行版还是在线版?如果以上确实正确,我也可能会为 tomllib 提交一个bug(除非已经有工单)。
解决方案
在我们撰写本文时,TOML 1.1.0 相对较新,已在2025年 12月发布(大约三个月前)。CHANGELOG.md 将其作为TOML 1.1.0的第一条变更记录
允许在内联表中使用换行和尾逗号(#904)。
之前内联表必须在单行,且不能以尾逗号结尾。
这正好描述了你展示的语法。
同时,Python 3.14的 tomllib 库参考 指出
该模块提供一个解析TOML 1.0.0的接口
因此要让该语法工作,需要更新Python标准库。python/cpython#142956 提出这一点,似乎 相关的PR 已经合并,看起来应该会包含在Python 3.15中。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。