Проблема:
Вы пытаетесь выполнить yaml.safe_dump() для объекта, который является (или содержит) defaultdict, например:
yaml_fix.py
import yaml
import collections
yaml.safe_dump(collections.defaultdict(list))что приводит к следующему исключению:
yaml_repr_error.py
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/uli/.local/lib/python3.10/site-packages/yaml/__init__.py", line 269, in safe_dump
return dump_all([data], stream, Dumper=SafeDumper, **kwds)
File "/home/uli/.local/lib/python3.10/site-packages/yaml/__init__.py", line 241, in dump_all
dumper.represent(data)
File "/home/uli/.local/lib/python3.10/site-packages/yaml/representer.py", line 27, in represent
node = self.represent_data(data)
File "/home/uli/.local/lib/python3.10/site-packages/yaml/representer.py", line 58, in represent_data
node = self.yaml_representers[None](self, data)
File "/home/uli/.local/lib/python3.10/site-packages/yaml/representer.py", line 231, in represent_undefined
raise RepresenterError("cannot represent an object", data)
yaml.representer.RepresenterError: ('cannot represent an object', defaultdict(<class 'list'>, {}))Решение
Вам нужно добавить пользовательский репрезентатор для неявного преобразования defaultdict в dict.
Перед запуском yaml.safe_dump() добавьте следующие строки:
represent_defaultdict_fix.py
import collections
from yaml.representer import Representer
yaml.SafeDumper.add_representer(collections.defaultdict, Representer.represent_dict)Теперь вызов yaml.safe_dump() должен работать идеально:
yaml_safe_dump_defaultdict_fixed.py
yaml.safe_dump(collections.defaultdict(list)) # Returns'{}\n'
Check out similar posts by category:
Python
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow