tomllib 是 python 3.11+ 标准库模块,无需安装,直接 import 即可;若报 modulenotfounderror,说明 python 版本低于 3.11。

tomllib 是 Python 3.11+ 的标准库,无需 pip 安装
Python 3.11 正式将 tomllib 纳入标准库(PEP 680),它只读、轻量、无第三方依赖。你不需要 pip install tomllib —— 那会装错包(比如旧版 tomli),反而可能覆盖或冲突。直接 import tomllib 即可,但注意:它不支持写入,也不支持注释保留、格式化等高级功能。
常见错误现象:ModuleNotFoundError: No module named 'tomllib',基本是因为你用的是 Python ImportError: cannot import name 'load' from 'tomllib',则可能是误装了第三方 tomli 并混淆了 API。
用 tomllib.load() 读取文件对象,不是文件路径
tomllib.load() 只接受已打开的二进制文件对象(bytes),不是字符串路径。这是和 json.load() 一致的设计,但容易忽略编码细节。
- 必须以
'rb'模式打开文件,否则会报TypeError: expected bytes, got str - 文件默认按 UTF-8 解码,不支持 BOM 自动跳过(若配置文件带 UTF-8 BOM,会解析失败)
- 不能直接传路径字符串,
tomllib.load('config.toml')是错的
正确写法:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
import tomllib
with open('config.toml', 'rb') as f:
config = tomllib.load(f)
解析失败时抛出 tomllib.TOMLDecodeError,需捕获具体位置
tomllib 解析失败时不会静默忽略,而是抛出 tomllib.TOMLDecodeError,其 .line 和 .col 属性能准确定位问题位置,比靠肉眼找 TOML 语法错误高效得多。
- 常见触发场景:键名含非法字符(如空格未加引号)、表头重复定义、布尔值写成
true以外的大小写(True或TRUE不合法)、数组嵌套过深 - 错误信息示例:
TOMLDecodeError: Invalid literal character: 'x' (line 5, column 12) - 建议始终包裹
try/except,尤其在生产环境加载用户配置时
示例:
try:
with open('config.toml', 'rb') as f:
config = tomllib.load(f)
except tomllib.TOMLDecodeError as e:
print(f"配置解析失败,第 {e.line} 行第 {e.col} 列:{e.msg}")
不支持动态 key、内联表嵌套展开、以及自定义类型转换
tomllib 严格遵循 TOML v1.0.0 规范,不做任何“智能扩展”。这意味着它不会帮你把字符串 "2023-10-01" 转成 date,也不会把 {a = 1, b = 2} 这种内联表自动扁平化为嵌套字典(它本来就解析成嵌套字典)。但它也不支持像 pydantic-settings 那样的字段校验或类型注解驱动转换。
- 所有值都是基础 Python 类型:
str、int、float、bool、datetime.date/datetime.datetime(仅当 TOML 中显式使用 RFC 3339 格式)、list、dict - 没有
parse_float、object_hook等回调参数,无法干预解析过程 - 若需类型安全或默认值填充,得在
tomllib.load()之后手动处理,或叠加dataclasses/pydantic
也就是说:它只做一件事——把合法 TOML 文本变成原生 Python 数据结构。多一分都不干。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










