在以下测试数据中,我试图将键“ 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]
一无所有的循环不会运行:
>>> 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,则需要Try / Except ;如果要避免一个KeyError,则可以执行以下任一操作:
if 'x' in d: # test if 'x' is a key in d
or
d.get('x') # returns the value, or None
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句