大约5个小时前, 4.1.0 版本发布了。它破坏了我的单元测试。下面是一个干净的MVCE,显示如下:
4.1.0
版本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
>>> import numpy as np >>> import yaml >>> x = np.int64(2) >>> yaml.dump(x, Dumper=yaml.Dumper) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/foo/anaconda3/envs/bar/lib/python3.6/site-packages/yaml/__init__.py", line 217, in dump return dump_all([data], stream, Dumper=Dumper, **kwds) File "/foo/anaconda3/envs/bar/lib/python3.6/site-packages/yaml/__init__.py", line 196, in dump_all dumper.represent(data) File "/foo/anaconda3/envs/bar/lib/python3.6/site-packages/yaml/representer.py", line 26, in represent node = self.represent_data(data) File "/foo/anaconda3/envs/bar/lib/python3.6/site-packages/yaml/representer.py", line 57, in represent_data node = self.yaml_representers[None](self, data) File "/foo/anaconda3/envs/bar/lib/python3.6/site-packages/yaml/representer.py", line 229, in represent_undefined raise RepresenterError("cannot represent an object", data) yaml.representer.RepresenterError: ('cannot represent an object', 2)
为什么 PyYAML 不再支持这些对象类型有明确的原因吗?
PyYAML
发布于 2018-06-27 03:47:32
在PyYAML 4.x中, dump 是 safe_dump 的别名,它不会处理任意对象:
dump
safe_dump
>>> yaml.dump is yaml.safe_dump