我看到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的正确方法吗?
发布于 2020-09-16 08:41:40
yaml.safe_load(sys.stdin)
只是做yaml.load(sys.stdin, Loader=yaml.SafeLoader)
。
用于执行任意Python代码(使加载不安全)的工具是在默认情况下使用的yaml.Loader
中实现的。yaml.BaseLoader
不包含它们。因此,如果使用yaml.BaseLoader
,加载将不会执行任意Python代码(也就是说,除非您自己向yaml.BaseLoader
注册自定义构造函数)。
https://stackoverflow.com/questions/63911610
复制相似问题