3
所以,我有一些代碼,其中包含一本字典,我做了一些字典驗證。驗證規則基本上是字典可能包含'to'鍵或'to []'鍵。它包含了哪一個,我需要的值返回,所以我可以檢查長度對在字典中的另一個密鑰的長度。的Python dict.get()行爲*默認*不
其實我已經找到了一個更好的辦法來解決眼前的問題,但通過這個工作,我在Python 2.7.1跨一個奇怪的行爲來,這意味着一個dict.get()不工作方式我想,所以我正在尋找一些澄清之前,我潛水到C實施的字典,我並不特別急於做:)
簡短的摘要版本是,它似乎如果你通過默認值將獲得(),巨蟒試圖評估該默認即使第一個參數是字典中的一個有效的密鑰。
下面是一個例子:
>>> toparm = 'to'
>>> toarrparm = 'to[]'
>>> d = {toparm: 'foo'}
>>> d.get(toarrparm, [d[toparm]])
['foo']
>>> d = {toarrparm: ['foo', 'bar']}
>>> d.get(toarrparm, [d[toparm]])
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: 'to'
>>> d
{'to[]': ['foo', 'bar']}
>>> toarrparm
'to[]'
>>> sys.version
'2.7.1 (r271:86882M, Nov 30 2010, 10:35:34) \n[GCC 4.2.1 (Apple Inc. build 5664)]'
>>> d['to[]'] = ['foo', 'bar', 'baz']
>>> d
{'to[]': ['foo', 'bar', 'baz']}
>>> d.get(toarrparm)
['foo', 'bar', 'baz']
>>> d.get(toarrparm, [d[toparm]])
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: 'to'
>>> d
{'to[]': ['foo', 'bar', 'baz']}
>>> d['to'] = 'foo'
>>> d.get(toarrparm, [d[toparm]])
['foo', 'bar', 'baz']
>>>
如果這種行爲是舊聞,有人可以解釋爲什麼那會是什麼?我是不是應該總是問爲嘛我覺得不有第一?如果我真的不知道哪一個會在那裏呢?回落試試/除了?我錯過了其他的東西嗎?
D'哦!當然,我知道這個規則,但我想我只是處於一種糟糕的思維模式。太靠近問題==愚蠢的錯誤。感謝一堆提醒! – jonesy 2011-03-22 13:51:28