我有一个 YAML 文件,想限制某个字段不包含空格。
这是一个演示我尝试的脚本:
测试.py
#!/usr/bin/env python3
import os
from ruamel import yaml
def read_conf(path_to_config):
if os.path.exists(path_to_config):
conf = open(path_to_config).read()
return yaml.load(conf)
return None
if __name__ == "__main__":
settings = read_conf("hello.yaml")
print("type of name: {0}, repr of name: {1}".format(type(
settings['foo']['name']), repr(settings['foo']['name'])))
if any(c.isspace() for c in settings['foo']['name']):
raise Exception("No whitespace allowed in name!")
这是我对 YAML 文件的第一个剪辑:
你好.yaml
foo:
name: "hello\t"
在上述 YAML 文件中,正确引发了异常:
type of name: <class 'str'>, repr of name: 'hello\t'
Traceback (most recent call last):
File "./test.py", line 16, in <module>
raise Exception("No whitespace allowed in name!")
Exception: No whitespace allowed in name!
但是,如果我将双引号更改为单引号,则不会引发异常:
08:23 $ ./test.py
type of name: <class 'str'>, repr of name: 'hello\\t'
使用ruamel.yaml==0.11.11
和时都会发生此行为PyYAML=3.11
。
为什么在这些 Python YAML 解析器中的单引号和双引号之间存在差异,而据我所知,在 YAML 规范中它们之间没有功能差异?如何防止特殊字符被转义?