当YAML文件为空时加载空字典(Python 3.4)
我有一个YAML文件是空的,当我加载它时,我想将它作为一个空字典加载。例如,我有当YAML文件为空时加载空字典(Python 3.4),python,dictionary,yaml,Python,Dictionary,Yaml,我有一个YAML文件是空的,当我加载它时,我想将它作为一个空字典加载。例如,我有 import yaml with open('an_empty_file.yml', 'r') as config_file: config=yaml.load(config_file) print(config) None 结果是yaml.load(config\u文件)将返回一个NoneType对象,我认为这是有意义的。有没有简单的方法可以返回一个空字典?如果它返回None,您可以只使用或,
import yaml
with open('an_empty_file.yml', 'r') as config_file:
config=yaml.load(config_file)
print(config)
None
结果是
yaml.load(config\u文件)
将返回一个NoneType
对象,我认为这是有意义的。有没有简单的方法可以返回一个空字典?如果它返回None
,您可以只使用或,这样,如果yaml.load
不返回任何值,您的配置将默认保留一个空字典:
config = yaml.load(config_file) or {}
最终,这里发生的事情从左手边开始:
我们现在正在为config分配一个值。我们声明将yaml.load(config_file)
分配到config中,但是,通过使用或
,我们在该语句中所说的是,如果(yaml.load
)的计算结果为无或假条件(即,在本例中,我们为无),那么我们将{}
分配到config中
将空字符串作为配置文件的快速演示:
>>> import yaml
>>> config_file = ''
>>> config = yaml.load(config_file) or {}
>>> print(config)
{}
在顶层,YAML文件可以具有
- 一个映射,由
:
分隔的键值对表示(可以选择使用{}
以流样式)
- 如果是块样式,则由
-
指示;如果是流样式,则由[]
指示
- (单个)标量
您的文件不是映射或序列,因此它是一个标量,因为带有空表示的标量被视为与指定相同
null
在文件中
要将其作为空词典而不是无词典加载,您可以执行以下操作:
with open('an_empty_file.yml', 'r') as config_file:
config = yaml.load(config_file)
config = {} if config is None else config
print(config)
你应该永远不要尝试走捷径:
config = yaml.load(config_file) or {}
因为这也会导致文件具有单个标量0
:
0
使用单标量浮点0.0
:
0.0
使用十六进制标量0x0
:
0x0
使用空双引号标量“”
带有空的单引号标量'
使用空折叠标量:
>
使用空文字样式标量:
|
使用单个布尔值False
:
False
或no
imk_:
no
off
或off
ª:
no
off
以及空序列:
[
]
使config
成为空字典
将错误地更改为空字典的不同文件内容的数量是无穷无尽的
这是因为PyYAML从未将1.1更新为2009年发布的1.2标准。如果是的话,它还可以转换形式为0o0
的八进制,谢谢您的帮助!它确实解决了问题,但我有点困惑。我熟悉或
作为布尔运算符的用法,但我不太明白它为什么在这里工作。我很乐意解释一下。更新答案。很有趣。所以None
和False
是相同/相似的吗?@Vincent。这是我们必须小心的地方。它们根本不一样,但它们的评估结果是相同的错误条件。如果执行If None==False:print('stuff')
。你不会看到东西。如果无错误,甚至:打印('asdf')
asdf'将不会被输出。