布尔值 (Bool)

布尔值可以使用 Bool 验证器进行解析。

它不区分大小写地将“yes”、“true”、“1”、“on”解释为“True”,“y”及其反义词解释为 False。

不同的值将触发验证错误。

使用 True 或 False 更新 YAML 对象上的布尔值时,往返的字符串版本将设置为“yes”和“no”。

要将布尔值更新为不同的 yes/no 字符串,请使用字符串进行更新 - 例如“on”或“off”。

yaml_snippet 示例

a: yes
b: true
c: on
d: 1
e: True
f: Y

u: n
v: False
w: 0
x: Off
y: FALSE
z: no
from strictyaml import Bool, Str, MapPattern, load
from ensure import Ensure

schema = MapPattern(Str(), Bool())

解析为 YAML 对象

Ensure(load(yaml_snippet, schema)).equals({
    "a": True, "b": True, "c": True, "d": True, "e": True, "f": True,
    "u": False, "v": False, "w": False, "x": False, "y": False, "z": False,
})

YAML 对象应解析为 True 或 False

Ensure(load(yaml_snippet, schema)["w"]).equals(False)

使用 .data 你可以获取解析的实际布尔值

assert load(yaml_snippet, schema)["a"].data is True

.text 返回布尔 YAML 的文本

Ensure(load(yaml_snippet, schema)["y"].text).equals("FALSE")

使用字符串和布尔类型更新布尔值

yaml = load(yaml_snippet, schema)
yaml['a'] = 'no'
yaml['b'] = False
yaml['c'] = True
print(yaml.as_yaml())
a: no
b: no
c: yes
d: 1
e: True
f: Y

u: n
v: False
w: 0
x: Off
y: FALSE
z: no

无法将布尔值转换为字符串

str(load(yaml_snippet, schema)["y"])
builtins.TypeError:
Cannot cast 'YAML(False)' to str.
Use str(yamlobj.data) or str(yamlobj.text) instead.

不同的不可解释值会引发验证错误

load('a: yâs', schema)
strictyaml.exceptions.YAMLValidationError:
when expecting a boolean value (one of "yes", "true", "on", "1", "y", "no", "false", "off", "0", "n")
found arbitrary text
  in "<unicode string>", line 1, column 1:
    a: "y\xE2s"
     ^ (line: 1)