代码之家  ›  专栏  ›  技术社区  ›  forest

如果YAML键没有值(而不是无值),则加载时出错?

  •  1
  • forest  · 技术社区  · 7 年前

    我有一个具有未知“层”数的YAML文件,因此当我将其加载到Python字典时,它将成为一个嵌套字典。

    • 在过程中导致错误 yaml.load() 如果缺少值,或
    • None 结果嵌套字典中的值。

    import yaml
    with open(input_path, "r") as yaml_file:
        my_dict = yaml.load(yaml_file)
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Anthon    7 年前

    您可以重新定义 Parser process_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 这被证明是不安全的,几乎肯定是不合适的。