Python yaml.load 和 yaml.safe_load 之间的区别
Python difference between yaml.load and yaml.safe_load
我看到 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
注册自定义构造函数)。
我看到 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
注册自定义构造函数)。