Mongo查询无法识别空记录

时间:2012-11-25 02:20:24

标签: python mongodb pymongo

我正在浏览我的集合并返回坐标信息,但是当它遇到空记录时会抛出此错误:

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

我在首次检查集合中确实存在doc之后执行此操作。现在它似乎打印了集合中的所有现有坐标。

谢谢

3 个答案:

答案 0 :(得分:2)

我不确定你打印b的原因,因为上面的代码中没有定义。也许你的意思是a

无论哪种方式,你都应该能够:

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

或者您想对doc做些什么。如果某些doc项目没有coordinates,则您需要为此做类似的事情。

答案 1 :(得分: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值是两个项目,因此当您调用该函数时,您需要准备好接受两个返回项目。如果coordinates中没有doc,则会返回None, None

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

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

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

答案 2 :(得分:1)

您还可以使用异常处理来重写get_coords()函数,如下所示:

def get_coords(doc):
    try:
        longs, lat = doc
        return lat, longs
    catch TypeError:
        return None, None
相关问题