如果 YAML 密钥没有值(而不是 None),加载时会出错?

Error on load if YAML key has no value (instead of None)?

我有一个包含未知数量 "layers" 的 YAML 文件,所以当我将它加载到 Python 字典时,它变成了一个嵌套字典。

我不想在 YAML 文件中允许没有值的键。我想:

import yaml
with open(input_path, "r") as yaml_file:
    my_dict = yaml.load(yaml_file)

您可以重新定义 Parserprocess_empty_scalar 方法来引发错误:

import yaml

yaml_str = """\
- 1
- - 2
  -
  - 3
"""

def pes(*args, **kw):
    raise NotImplementedError

yaml.parser.Parser.process_empty_scalar = pes

data = yaml.safe_load(yaml_str)

print(data)

以上会引发错误,如果您注释掉对 .process_empty_scalar 的赋值,它会解析正确。

请注意:

  • YAML 中的层并不一定意味着 python dict 将形成
  • 您正在使用 .load,它被记录为不安全并且几乎可以肯定是不合适的。