如何从TOML文本文件提取base变量值并解决解包ValueError报错
问题原因
- 报错触发点为
name, value = line.replace(' ', '').strip('=')这行代码:strip('=')的作用是移除字符串首尾的=字符,并不会将字符串按=切分成两段,你最终拿到的仍是一整行字符串,赋值给两个变量自然会触发「需要2个值但拿到了更多」的错误。 - 除此之外手动逐行解析TOML兼容性极差,数组、带空格的字符串、注释等场景都无法正常处理。
解决方案
方案1:使用TOML专属解析库(推荐)
Python 3.11及以上版本已经内置了tomllib模块专门解析TOML文件,无需额外安装:
import tomllib with open('txt.toml', 'rb') as f: config = tomllib.load(f) print(config['base'])
如果是3.11以下的Python版本,安装第三方toml库即可使用:
pip install toml
调用逻辑和内置库基本一致:
import toml with open('txt.toml', 'r') as f: config = toml.load(f) print(config['base'])
该方案会自动适配所有TOML语法规则,自动完成数组、布尔值、字符串的类型转换,无需手动处理格式问题。
方案2:修复现有手动解析代码
如果确实不想引入额外依赖,且你的TOML文件结构非常简单(无嵌套、无值包含=的场景),可以修改代码如下:
variable = {} with open('txt.toml', 'r') as file: for line in file: line = line.strip() # 跳过空行 if not line: continue # 按第一个=切分,避免值里包含=导致拆分错误 name, value = line.split('=', 1) # 去除键和值的首尾空格 name = name.strip() value = value.strip() variable[name] = value # 如需数值类型可手动转float print(float(variable['base']))
内容的提问来源于stack exchange,提问作者Aim
相关产品推荐
相关产品推荐

