使用“!!python/object”将 UUID 插入 YAML 时出错

问题描述 投票:0回答:2

对于自动化测试脚本,我想在运行时生成随机 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 值?

pyyaml
2个回答
0
投票

一开始我发现这个错误消息有点吓人,但经过一番思考,我能够解压它。

解析器需要一个“映射”节点,而不是标量。那么,如果我添加映射会发生什么?

>>> yaml.load('''---
... applicant:
...   idNumbers:
...     nationalId: !!python/object:uuid.uuid4 {}''')
{'applicant': {'idNumbers': {'nationalId': UUID('71e09d1d-e84e-4ea6-855d-be1a2e91b60a')}}}

其他信息:http://yaml.org/type/map.html


0
投票

您可以使用:

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 .

© www.soinside.com 2019 - 2024. All rights reserved.