MongoDB - 对不存在的字段进行错误处理

时间:2012-12-16 15:13:06

标签: python mongodb python-2.7 pymongo

我有一个集合,其中包含每个文档的一组字段值。其中一个称为“坐标”。现在,当我查询数据库以及该字段的非空元素时,它会返回正确的值,如我所料。

但是我现在遇到这个错误然后在python(Pymongo)中:

if not doc['coordinates']
TypeError: 'NoneType' object has no attribute '__getitem__'

这似乎暗示它已经遇到没有字段“坐标”的记录。我创建了这个字段并且应该存在的文档。

我想知道,我该如何处理此错误并防止此错误终止我的程序。

这就是我找到相应查询的方式:

 cursor = collection.find(
                { "$and" : [
                    {"term": {"$in": events}}, 
                    { "$or" : [
                            {"coordinates" : {"$ne": None}}, 
                            {"place" : {"$ne" : None}}
                    ]}
                ]}, 
            {"term" : 1, "coordinates" : 1, "place" : 1, "time_normal" : 1}, tailable = True, timeout = False )

然后我遍历返回的查询,如下:

while cursor.alive:
    try:
        doc = cursor.next()

        CODE IS HERE TO QUERY DB


    except StopIteration:
        pass

谢谢

4 个答案:

答案 0 :(得分:2)

您在示例中获得TypeError的原因以及nickmilon提供的示例中的AttributeError是因为您用来获取doc的查询不是找到任何东西(因此是NoneType)。检查您的查询,以确保您实际上从收集中获取信息。

但是,nickmilon提供的答案应该为您提供错误处理。

答案 1 :(得分:1)

你可以尝试:doc.get('coordinates')如果字段不存在则返回None或者如果存在则返回值

答案 2 :(得分:1)

Eric是对的,出于某种原因你的doc是None。你能在这里发布用于查找的代码以及如何处理从find返回的光标吗?

答案 3 :(得分:0)

我能够通过在异常块中包含TypeError来处理此错误,如:

                try:                                               
                    if not doc['coordinates']:
                        CODE HERE

                    else: 
                        CODE HERE

                except (TypeError):
                    pass