在以下测试数据中,我试图追加关键词' x'值列表ls。我的问题是为什么在循环数据的第一行时我没有得到KeyError。显然,第一行不包含密钥' x。最初我以为我必须使用Try / Except来避免在循环数据时出错,但似乎不需要Try / Except。
有谁能帮我理解为什么不在这里生成KeyError?
data = [{u'xyz': []},
{u'xyz': [{u'x' : 2,
u'y' : 3,
u'z' : 4}]}]
ls = []
for item in data:
ddd = item['xyz']
print ddd
for d in ddd:
ls.append(d['x'])
ls
输出:
[]
[{u'y': 3, u'x': 2, u'z': 4}]
[2]
答案 0 :(得分:2)
没有任何循环不会运行:
>>> for item in []:
... print item
...
>>>
所以
data = [{u'xyz': []},
... ]
# first time through
for item in data:
ddd = item['xyz']
# ddd is an empty list
for d in ddd:
# this doesn't run, therefore no KeyError
ls.append(d['x'])
如果您想要捕获一个KeyError,如果您想要避免那么你需要尝试/除外:
if 'x' in d: # test if 'x' is a key in d
or
d.get('x') # returns the value, or None
答案 1 :(得分:0)
第一行是一个空列表,没有KeyError
,因为它没有字典。循环:
for d in ddd:
未输入。尝试将第一行更改为:
data = [{u'xyz': [{}]},
您会看到KeyError
符合预期。