跳到内容

为什么不使用 Python 的 schema 库(或类似库)进行验证?

Python 的“schema”(以及类似库)也可以用来验证对象的结构。验证 YAML 甚至在他们的 README 中被引用为一个原因

使用模式进行验证需要首先将 YAML 通过解析器运行,然后获取输出(通常是像 dict 这样的数据结构),并将其通过模式传递。

不幸的是,这种方法存在一些问题

你仍然有挪威问题

如果标准 YAML 解析器将“NO”解析为 false 或空字符串解析为 None,那么模式是否说空字符串或文本“NO”可以,实际上并不重要,因为它将看到一个“None”或一个“False”,这将导致失败。

你无法获取验证错误的行号和代码片段

假设你已经成功地规避了挪威问题,解析并将输出传递给 schema 仍然存在问题。如果你将解析后的字典传递给 schema,schema 无法确定失败发生在哪个行号,也无法提供突出显示失败位置的代码片段。

如果无法实现,则往返转换将变得非常困难

由于解析后的 YAML 的元数据在被馈送到通用模式验证器时丢失,因此也无法更改数据并将其序列化而不会丢失关键细节(即映射排序、注释或验证结构)。