[英]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.