新的PyYAML版本在大多数自定义python对象representer上中断

2024-04-28 17:13:45 发布

您现在位置:Python中文网/ 问答频道 /正文

大约5小时前,版本4.1.0发布。它破坏了我的单元测试。以下是一个干净的MVCE显示:

3.12版:

>>> import numpy as np
>>> import yaml
>>> x = np.int64(2)
>>> yaml.dump(x, Dumper=yaml.Dumper)
'!!python/object/apply:numpy.core.multiarray.scalar\n- !!python/object/apply:numpy.dtype\n  args: [i8, 0, 1]\n  state: !!python/tuple [3, <, null, null, null, -1, -1, 0]\n- !!binary |\n  AgAAAAAAAAA=\n'

4.1.0版

^{pr2}$

对于PyYAML不再支持这些对象类型,是否有明确的原因?在


Tags: import版本numpyyamlobjectasnp单元测试
1条回答
网友
1楼 · 发布于 2024-04-28 17:13:45

dump现在是safe_dump,它不会处理任意对象:

>>> yaml.dump is yaml.safe_dump
True

danger_dump用于旧行为。在

^{pr2}$

load/safe_load也是如此。找不到4.1.0的文档或发行说明,我只是通过挖掘提交(here)找到的。在

Is there a clear reason for why PyYAML no longer supports these object types?

是的。yaml.load允许任意代码执行,而这样一个危险的特性只能选择使用——不可能偶然使用。可以说,从一开始就应该这样,我很高兴PyYAML的新维护者已经纠正了这一点。在

相关问题 更多 >