当前位置: 首页 > backend >正文

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117)
在这里插入图片描述
出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码:
在这里插入图片描述
放弃yaml.dump,又切回yaml.safe_dump。后面发现它只支持基本的数据类型,对于自定义对象或某些复杂对象(如 NumPy 数组、自定义类实例等),不知道如何序列化。

检查序列,确实存在数组:
在这里插入图片描述
改成intlist即可,具体可以参考下面的代码:

# 对象定义自定义的表示器(representer),序列化自定义对象####################
# numpy类型
import yaml
import numpy as npdef numpy_representer(dumper, data):return dumper.represent_list(data.tolist())yaml.add_representer(np.ndarray, numpy_representer)
data = {'array': np.array([1, 2, 3])}
with open('output.yaml', 'w') as f:yaml.dump(data, f)####################
# class类型
import yaml
class MyClass:def __init__(self, value):self.value = valuedef myclass_representer(dumper, data):return dumper.represent_scalar('tag:yaml.org,2002:str', str(data.value))yaml.add_representer(MyClass, myclass_representer)
data = {"my_object": MyClass(117),"other_data": [1, 2, 3]}
with open('output.yaml', 'w') as f:yaml.dump(data, f)

错误二:yaml.composer.ComposerError: expected a single document in the stream

在用yaml.dump写入**.yaml文件时,会用 “—**” 做分隔,如下所示:

# 文档1
key1: value1
---
# 文档2
key2: value2

直接用yaml.load读取会报错:
在这里插入图片描述
是因为PyYAML 库,默认情况下 yaml.safe_load()yaml.load() 只会加载第一个文档。

需要加载所有文档,可以使用 yaml.safe_load_all()yaml.load_all()

import yaml# 对于单个文档
with open('file.yaml', 'r') as f:data = yaml.safe_load(f)  # 只加载第一个文档# 对于多个文档
with open('file.yaml', 'r') as f:documents = list(yaml.safe_load_all(f))  # 加载所有文档chain_map = ChainMap(*documents)merged_dict = dict(chain_map)
http://www.xdnf.cn/news/13194.html

相关文章:

  • STM32ADC模数转换器,让你的32可以测量电压!!!
  • Mobile ALOHA全身模仿学习
  • MyBatis-Plus 常用条件构造方法
  • 什么是WBS项目管理?wbs项目管理有哪些核心功能?
  • 生产管理系统开发:专业软件开发公司的实践与思考
  • linux驱动开发(3)-页面分配器
  • C++模版初阶
  • deepseek: 重装系统
  • 【C/C++】玩转正则表达式
  • SQL-labs通关(23-38)
  • 使用VMware克隆功能快速搭建集群
  • 前端大文件分片上传详解 - Spring Boot 后端接口实现
  • 《机器学习》(周志华)第二章 模型评估与选择
  • 基于cornerstone3D的dicom影像浏览器 第三十一章 从PACS服务加载图像
  • 人工智能新纪元:技术跃迁、行业变革与未来挑战
  • python正则表达式
  • 【自动控制原理】分析和设计控制系统的性能(*^▽^*)
  • Libero SoC v2024.2 软件安装与LICENSE申请
  • Vue3中的computer和watch
  • RocketMQ 重试机制详解及最佳实践
  • 计算机网络笔记(三十二)——5.4可靠传输的工作原理
  • 【PHP】BC Math 函数参考表
  • 反射获取方法和属性
  • 2-2 Linux-命令入门(2025.6.9学习篇)
  • uni-app页面发布测试环境出现连接服务器超时,点击屏幕重试解决方案
  • Flv与Rtmp
  • Jetpack Compose 与 ViewModel 的完美结合
  • docker开启2375端口-docker开启api接口 ,实现远程访问,dockerapi官方文档
  • NIFI的处理器:SplitJson 2.4.0
  • 适配java8版本的langchian4j实战