2012-11-25 82 views
1

我會通過我的收集和返回座標信息,但是當它擊中它拋出這個錯誤空記錄:蒙戈查詢犯規承認空記錄

a=get_coords(doc['coordinates']['coordinates']) 
print a 

這是函數get_coords:

def get_coords(doc): 
    if doc == None: 
     pass 
    else: 
     longs, lat = doc 

     return lat, longs 

錯誤:

TypeError: 'NoneType' object has no attribute '__getitem__' 

這則停止我的查詢,並沒有進一步的記錄再轉身。

我怎樣才能防止這種情況發生,我的意思是我仍然希望它繼續尋找其他記錄,而不是與此錯誤信息停止。

謝謝

感謝他們都幫助的答案。我能得到它的實現:

if doc['coordinates']==None: 
    pass 
else: 
    b=get_coords(doc['coordinates']['coordinates']) 
    print b 

我做到這一點首先檢查確實是有集合中的一個文檔後。它現在似乎打印集合中的所有現有座標。

感謝

回答

2

我不知道爲什麼你打印b,因爲這不是在上面的代碼中定義。也許你的意思是a

無論哪種方式,你應該能夠做到:

if doc==None: 
    pass 
else: 
    a=get_coords(doc['coordinates']['coordinates']) 
    print b 

或任何你想要的doc做。如果某些doc商品沒有coordinates,那麼您需要爲此做類似的事情。

+1

感謝突出使用var b中的錯字。我已經用你的建議更新了我的功能,它仍然發送相同的錯誤。 – user94628

+0

好的,感謝您的更新!它仍然返回一個錯誤,因爲你不能在NoneType上調用doc ['coordinates'] ['coordinates']'...所以我會嘗試編輯我的答案以滿足你的需要......等等,試試我的實際的代碼:也就是說,不要在'get_coords'函數中使用'if'語句,而應該使用類似的方式。 – rofls

+0

我會嘗試改變我的答案,如果它仍然不適合你,但請嘗試更接近我的答案:不要求'doc ['coordinates'] ['coordinates']'直到* after * you知道'doc'存在。 – rofls

1

威爾doc總是有coordinates屬性?如果是這樣,該字典是否會有另一個coordinates屬性?假設doc永遠是字典(甚至只是一個空白的),你可以試試這個:

In [90]: def get_coords(doc): 
    ....:  if doc.get('coordinates', None): 
    ....:   if doc['coordinates'].get('coordinates', None): 
    ....:    return doc['coordinates']['coordinates'] 
    ....:  return None, None 
    ....: 

In [91]: doc 
Out[91]: 
{'coordinates': {u'coordinates': [-81.453134399999996, 28.5287337], 
       u'type': u'Point'}} 

In [92]: get_coords(doc) 
Out[92]: [-81.453134399999996, 28.5287337] 

In [93]: new_doc = {'coordinates': {u'type': u'Point'}} 

In [94]: get_coords(new_doc) 
Out[94]: (None, None) 

In [95]: empty_doc = {} 

In [96]: get_coords(empty_doc) 
Out[96]: (None, None) 

注意,return值是兩個項目,所以當你調用該函數,你需要做好準備,接受兩個退換貨品。如果doc中沒有coordinates,則將返回None, None

In [101]: lat, long = get_coords(doc) 

In [102]: lat 
Out[102]: -81.453134399999996 

In [103]: long 
Out[103]: 28.5287337 
+0

感謝您的幫助,是的文檔將有一個座標屬性和一個。我喜歡你解決這個問題的方式。我會發現它有幫助。 – user94628

+1

@ user94628沒有問題:)另外,一個快速的Python提示 - 如果你有像'if x == None'這樣的比較,你可以說'if not x',這是一個更多Pythonic。 – RocketDonkey

+0

感謝您的提示,我試圖變得更pythonic,但仍試圖打破Java的習慣。 – user94628

1

你也可以使用異常處理來重寫get_coords()功能是這樣的:

def get_coords(doc): 
    try: 
     longs, lat = doc 
     return lat, longs 
    catch TypeError: 
     return None, None