You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyYAML无法解析含块字面量(|)的YAML文件,求解决建议

解决PyYAML解析含Markdown块字面量的YAML文件报错问题

你遇到的问题本质是YAML语法不符合规范,PyYAML对块字面量(|)的格式要求很严格,咱们一步步来解决:


1. 错误原因分析

你写的YAML里,product name: | Azure big VM这种写法是不合法的。YAML规定,块字面量符号|后面必须紧跟换行,然后在下一行缩进内容(缩进层级要和其他键值对保持一致)。如果直接在|后面跟内容,解析器会把整个| Azure big VM当成无效的语法标记,从而抛出解析错误。


2. 修正YAML格式(最直接的解决办法)

把含|的行改成标准的块字面量格式即可:

---
product name: |
  Azure big VM
product version: 1.0.0
Operating System: RHEL
disk type: premium ssd
location: uk-south

如果你的Markdown块有多行内容,只要保持统一缩进就行:

product name: |
  # Azure big VM
  这是一款高性能的云虚拟机,支持:
  - 超大内存
  - 高IO磁盘

3. 替代方案:使用更兼容的YAML解析库

如果经常需要处理复杂的YAML(比如含Markdown块、YAML 1.2语法),推荐使用ruamel.yaml,它对YAML规范的支持比PyYAML更完善,处理块字面量更稳定。

安装依赖

pip install ruamel.yaml

示例脚本

from ruamel.yaml import YAML

# 初始化安全加载器(避免安全风险)
yaml = YAML(typ='safe')
with open('single-source.yaml', 'r', encoding='utf-8') as file:
    documentation = yaml.load(file)
print(documentation)

4. 额外注意事项

  • 永远不要在生产环境中使用yaml.load()而不指定安全加载器(比如yaml.FullLoader),这会有代码注入的安全风险,推荐使用yaml.safe_load()或者上面提到的ruamel.yaml的安全模式。
  • 如果需要保留块字面量的换行符,|会保留末尾的换行;如果想去掉末尾换行,可以用|-;如果想保留所有换行(包括末尾空行),用|+。

内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:22:31