yaml.load() 函数中的 loader 参数有什么作用?

Suz*_*rts 4 yaml pyyaml

我正在编写一个代码来读取 YAML 文件作为输入。我Loaderyaml.load通话中看到以下选项:BaseLoader, SafeLoader, FullLoader, UnsafeLoader

这些选项有什么作用?如以下文档页面所述,加载完整的 YAML 语言意味着什么?

https://github.com/yaml/pyyaml/wiki/PyYAML-yaml.load(input)-Deprecation

Ant*_*hon 5

在 PyYAML 中,您调用以加载 YAML 的接口是基于函数的 (the load) 函数。

将 YAML 文件中的文本转换为 Python 对象、扫描解析组合构造的不同阶段的实现被实现为 PyYAML 使用组合将其组合到loader 中的类

有不同的加载器,主要是因为有不同的构造函数。例如,加载器的安全版本将使用安全构造函数,它不会创建任意的 Python 对象,基本加载器只加载字符串(而不是整数、浮点数、布尔值、日期)等。

在 PyYAML 中,不会创建要使用的特定加载器的实例,然后调用其方法之一(或将参数传递给初始化)。相反,您将要创建的对象类型(即它的类)load()作为Loader参数传递给函数。还有一些实用功能,例如unsafe_load()本质上 doload(..., Loader=BaseLoader,...)等,适合您。


请注意,因此,除了构建的实际数据之外,很难从加载过程中获取任何值(假设您对扫描仪丢弃的评论数量感兴趣):很容易将扫描器并添加功能,但是您需要制作一个与此扫描器组合在一起的替代加载器,然后在load(..., Loader=YourLoader)调用结束时它YourLoader消失了,因此您无法获得添加到扫描器(或解析器、作曲家、构造函数)的任何属性) 实例来存储信息。

上面描述的是纯 Python 版本,基于 C 的加载器对于扫描器/解析器的工作方式略有不同。