簡體   English   中英

當密鑰不存在時,為什么沒有收到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'])

如果要捕獲一個KeyError,則需要“嘗試/例外”,如果要避免一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM