当密钥不存在时,为什么我没有得到 KeyError?
Why didn't I get a KeyError when the key did not exist?
在下面的测试数据中,我尝试将键 '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'])
Try/Except 如果你想 捕获 一个 KeyError,如果你想 避免 一个你可以做:
if 'x' in d: # test if 'x' is a key in d
or
d.get('x') # returns the value, or None
第一行是一个空列表,没有KeyError
因为里面没有字典。所以循环:
for d in ddd:
未输入。尝试将第一行更改为:
data = [{u'xyz': [{}]},
您会按预期看到 KeyError
。
在下面的测试数据中,我尝试将键 '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'])
Try/Except 如果你想 捕获 一个 KeyError,如果你想 避免 一个你可以做:
if 'x' in d: # test if 'x' is a key in d
or
d.get('x') # returns the value, or None
第一行是一个空列表,没有KeyError
因为里面没有字典。所以循环:
for d in ddd:
未输入。尝试将第一行更改为:
data = [{u'xyz': [{}]},
您会按预期看到 KeyError
。