yaml.load 和 yaml.safe_load 的 Python 区别

标签 python python-3.x yaml pyyaml

我看到 PyYaml 在从 yaml 文件加载时截断零,如果使用:yaml.safe_load(stream) .
如果使用 yaml.load(stream, Loader=yaml.BaseLoader) 可以修复,但这是可取的吗?
它适用于 yaml.load并且零不会被截断。
我想了解切换到 yaml.load 是否安全而不是 yaml.safe_load ?
例子:
测试yaml内容:

$cat test.yml
number: 5.10
代码:
$python -c 'import yaml, sys; content = yaml.safe_load(sys.stdin); 
print(content) ' < test.yml
{'number': 5.1}
<< 它在末尾截断 0。但这是由于浮点值 >>
而我想要的是确切的数字。
$python -c 'import yaml, sys; content = yaml.load(sys.stdin, 
Loader=yaml.BaseLoader); print(content) ' < test.yml
{u'number': u'5.10'}
这是将其更改为 yaml.load 的正确方法吗?

最佳答案

yaml.safe_load(sys.stdin)只是yaml.load(sys.stdin, Loader=yaml.SafeLoader) .
执行任意 Python 代码(这使得加载不安全)的工具在 yaml.Loader 中实现。这是默认使用的。 yaml.BaseLoader不包含它们。因此,如果您使用 yaml.BaseLoader ,加载不会执行任意 Python 代码(也就是说,除非您自己注册自定义构造函数 yaml.BaseLoader)。

关于yaml.load 和 yaml.safe_load 的 Python 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63911610/

相关文章:

python - 以 unicode 字符串为名称的 namedtuple

python - 考虑到另一列的值,如何从 DataFrame 中删除重复项

python - 试图从谷歌抓取图像

python - 如何用Python从NHC网站提取表格?

php - YML 验证文件被忽略

xml - 键值对序列化与 JSON、XML 等

php - 如何在 Mac 上安装 PECL YAML 扩展?

python - 谷歌云 SDK 安装失败 UnicodeDecodeError : 'ascii' codec

python - 3D CNN 在图像序列上的输入形状应该是什么?

python - 将一个图像粘贴到另一个图像上