Python 为什么没有';当密钥不存在时,我不会得到密钥错误吗?

Python 为什么没有';当密钥不存在时,我不会得到密钥错误吗?,python,keyerror,Python,Keyerror,在下面的测试数据中,我试图将键“x”值附加到列表ls中。我的问题是为什么在循环遍历第一行数据时没有得到一个KeyError。显然,第一行不包含键“x”。最初我认为我必须使用Try/Except来避免在循环数据时出错,但似乎Try/Except是不必要的 有人能帮我理解为什么这里不生成keyrerror吗 data = [{u'xyz': []}, {u'xyz': [{u'x' : 2, u'y' : 3,

在下面的测试数据中,我试图将键“x”值附加到列表ls中。我的问题是为什么在循环遍历第一行数据时没有得到一个KeyError。显然,第一行不包含键“x”。最初我认为我必须使用Try/Except来避免在循环数据时出错,但似乎Try/Except是不必要的

有人能帮我理解为什么这里不生成keyrerror吗

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]

无内容上的循环不会运行:

[]中项目的
>:
...     打印项目
...
>>>
所以

data=[{u'xyz':[]},
...       ]
#第一次通过
对于数据中的项目:
ddd=项目['xyz']
#ddd是一个空列表
对于ddd中的d:
#这不会运行,因此没有KeyError
ls.append(d['x'])
如果要捕获关键错误,则需要Try/Except;如果要避免关键错误,则可以执行以下操作之一:

如果d中的'x':#测试'x'是否是d中的键
或
d、 get('x')#返回值,或无

第一行是一个空列表,没有
键错误,因为其中没有字典。因此,循环:

for d in ddd:
未输入。尝试将第一行更改为:

data = [{u'xyz': [{}]},
您将看到预期的
keyrerror