对于自动化测试脚本,我想在运行时生成随机 UUID 值,因此我添加了一些如下所示的 YAML:
---
applicant:
idNumbers:
nationalId: !!python/object:uuid.uuid4
但是,当我尝试
yaml.load
值时,这会产生错误:
ConstructorError: expected a mapping node, but found scalar
in "<unicode string>", line 4, column 17:
nationalId: !!python/object:uuid.uuid4
^
如何通过 YAML 标签注入 UUID 值?
一开始我发现这个错误消息有点吓人,但经过一番思考,我能够解压它。
解析器需要一个“映射”节点,而不是标量。那么,如果我添加映射会发生什么?
>>> yaml.load('''---
... applicant:
... idNumbers:
... nationalId: !!python/object:uuid.uuid4 {}''')
{'applicant': {'idNumbers': {'nationalId': UUID('71e09d1d-e84e-4ea6-855d-be1a2e91b60a')}}}
您可以使用:
import uuid
import yaml
def uuid_representer(dumper, data):
return dumper.represent_scalar('tag:yaml.org,2002:str', str(data))
yaml.add_representer(uuid.UUID, uuid_representer)
对于隐式方法放入 init.py .