2014-02-21 143 views
0

我有一個對象正在創建,有時它不會創建,即None返回缺少NONE對象

我執行以下 dic.get("findThis")但由於dic有時None它會返回AttributeError: 'NoneType' object has no attribute 'get'

有喜歡使用

if not dic: 
    print "MISSING" 
else: 
    #do your stuff`. 

什麼是更好的方式來做到這一點檢查dic生存了幾個解決方案?

+3

沒有你的特定問題的背景下,我認爲你的做法是最好的這些情況。但是也許在更具體的情況下有更好的方法。 –

+0

您的解決方案沒有任何問題。除非你不想打印缺少空字典,在這種情況下,如果dic不是None,你可以這樣做 –

回答

3

你在找三元運算符嗎?

result = dic.get("findThis") if dic else None

+0

不,不是。例如,假設我做了類似於 ''[dic.get(「findThis」),dic.get(「findThis2」),dic.get(「findThis3」),dic.get(「findThis4」),dic.get (「findThis5」),dic.get(「findThis6」)]',他們都應該返回「MISSING」,而不必爲每個檢查。 –

+1

你能詳細說明嗎?爲什麼dic可能變成None,看起來你應該只用空dict而不是None作爲默認值。 – teferi

+0

'dic'從json響應返回,有時缺少。 –

0

可以使用defaultdict的使用這樣的:

import collections 

#example function returning the dict 
def get_dict_from_json_response(): 
    return {'findThis2':'FOUND!'} 

defdic = collections.defaultdict(lambda: 'MISSING') 

#get your dict 
dic = get_dict_from_json_response() 

if dic: 
    defdic.update(dic) #copy values 

dic = defdiC#now use defaultdict 
print [dic["findThis"],dic["findThis2"],dic["findThis3"],dic["findThis4"],dic["findThis5"],dic["findThis6"]] 

輸出:

['MISSING', 'FOUND!', 'MISSING', 'MISSING', 'MISSING', 'MISSING']