如果 YAML 密钥没有值(而不是 None),加载时会出错?
Error on load if YAML key has no value (instead of None)?
我有一个包含未知数量 "layers" 的 YAML 文件,所以当我将它加载到 Python 字典时,它变成了一个嵌套字典。
我不想在 YAML 文件中允许没有值的键。我想:
- 如果存在缺失值,
yaml.load()
期间会导致错误,或者
- 识别生成的嵌套字典中的所有
None
值。
import yaml
with open(input_path, "r") as yaml_file:
my_dict = yaml.load(yaml_file)
您可以重新定义 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
,它被记录为不安全并且几乎可以肯定是不合适的。
我有一个包含未知数量 "layers" 的 YAML 文件,所以当我将它加载到 Python 字典时,它变成了一个嵌套字典。
我不想在 YAML 文件中允许没有值的键。我想:
- 如果存在缺失值,
yaml.load()
期间会导致错误,或者 - 识别生成的嵌套字典中的所有
None
值。
import yaml
with open(input_path, "r") as yaml_file:
my_dict = yaml.load(yaml_file)
您可以重新定义 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
,它被记录为不安全并且几乎可以肯定是不合适的。